首页 > 解决方案 > 将权限属性添加到 Swashbucke-Swagger-Documentation

问题描述

将 Swashbuckle 集成到我的 .Net Web-Api 项目(.Net Framework 4)中,我正在寻找一种方法来记录允许执行相应方法的角色。

我的每个 web-api 方法都有一个自定义属性,用于检查请求用户的 ActiveDirectory-Group 以及是否允许用户执行操作。但现在我想记录使用 Swashbuckle-Swagger 之类的

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

或者

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

我很想知道有什么标准可以使用。谁能给我一个聪明的把戏?

标签: .netswaggerswashbuckle

解决方案


现在,我使用“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(){
    ...
}

推荐阅读