代码之家  ›  专栏  ›  技术社区  ›  SNO

向Swashbucke Swagger文档添加权限属性

  •  3
  • SNO  · 技术社区  · 6 年前

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

    我的每个Web API方法都有一个自定义属性,用于检查请求用户的ActiveDirectory组以及是否允许该用户执行该操作。但现在我想证明,我使用的是像

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

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

    我很高兴听到我可以使用任何标准。 有人能给我一个聪明的把戏吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   SNO    6 年前

    现在,我使用“venderextension”属性解决了这个问题。 我创建了一个“swaggergroups”-属性:

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

    以及一个操作过滤器,用于读取属性并将列表添加到 供应商延伸 :

     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(){
        ...
    }
    
    推荐文章