Добавить атрибут разрешения для Swashbucke-Swagger-Documentation - PullRequest
0 голосов
/ 11 сентября 2018

Имея Swashbuckle, интегрированную в мой проект .Net Web-Api (.Net Framework 4), я ищу способ документировать роли, которым разрешено выполнять соответствующий метод.

Каждый из моих веб-сайтовМетоды -api имеют собственный атрибут, который проверяет группу ActiveDirectory запрашивающего пользователя и позволяет ли ему выполнить действие.Но теперь я хотел бы документально подтвердить, что с помощью Swashbuckle-Swagger, например

///
///<AllowedRole>Administrator</AllowedRole>
///
public IHttpActionResult Index(){
...
}

или

[SwaggerAllowedRole("Administrator")]
public IHttpActionResult Index(){
    ...
}

, я бы хотел услышать, что есть какой-либо стандарт, который я могу использовать.Кто-нибудь может дать мне хитрый трюк?

1 Ответ

0 голосов
/ 12 сентября 2018

Теперь я решил проблему с помощью атрибута "venderExtension". Я создал "SwaggerGroups" -Атрибут:

 [AttributeUsage(AttributeTargets.Method)]
 public class SwaggerGroupsAttribute : Attribute
 {
     public SwaggerGroupsAttribute(params string[] groups)
     {
         this.Groups = groups;
     }
     public IEnumerable<string> Groups{ get; }
 }

И фильтр операций, который считывает атрибуты и добавляет список в vendorExtension :

 public class GroupPermission: IOperationFilter
 {

        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            var attributes = apiDescription.GetControllerAndActionAttributes<SwaggerGroupsAttribute>().SingleOrDefault();
            if (attributes == null) return;

            if(operation.vendorExtensions == null) operation.vendorExtensions = new Dictionary<string, object>();
            var permissionList = new List<string>();
            foreach(var permission in attributes.Permissions)
            {
                permissionList.Add(permission);
            }
            operation.vendorExtensions.Add("someKey", permissionList);
        }
    }

С помощью этой настройки я могу определить разрешенные роли следующим образом:

[SwaggerGroups("Administrator")]
public IHttpActionResult Index(){
    ...
}
...