예제 #1
0
        void ViaCustomAttribute(OpenApiDocument swaggerDoc, DocumentFilterContext context)
        {
            MethodInfo methodInfo;
            //AppProfilesAttribute? customParam;
            EnumAppProfiles appProfile = EnumAppProfiles.Public;

            //  Se não conseguir converter o documento em um item do enumerador limpa todo o documento...
            if (!Enum.TryParse(swaggerDoc.Info.Title, true, out appProfile))
            {
                swaggerDoc.Paths.Clear();
            }
            //  Se não, prepara um documento apenas com os métodos liberados para o perfil...
            else
            {
                foreach (var apiDescription in context.ApiDescriptions)
                {
                    //  Por padrão assume que DEVE remover o item do documento
                    var removeRoute = true;
                    //  ... se foi possível obter o método associado à API...
                    if (apiDescription.TryGetMethodInfo(out methodInfo))
                    {
                        //  ... se foi possível encontrar um atributo que define qual o perfil pode acessar o método..
                        var customParam = methodInfo.GetCustomAttribute <AppProfilesAttribute>();
                        if (customParam != null)
                        {
                            //  ... se o atributo do perfil indica acesso público ou para o Perfil que representa o documento, então MANTEM no documento, caso contrário elimina-o
                            removeRoute = (customParam.Prifiles & EnumAppProfiles.Public | customParam.Prifiles & appProfile) == EnumAppProfiles.Undefined;
                        }
                    }
                    //  Se o parâmetro permaneceu "true" então a rota deve ser REMOVIDA...
                    if (removeRoute)
                    {
                        swaggerDoc.Paths.Remove("/" + apiDescription.RelativePath.TrimEnd('/'));
                    }
                }
            }
        }
예제 #2
0
 public AppProfilesAttribute(EnumAppProfiles profiles) => Prifiles = profiles;