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

基于声明的ASP.NET核心授权

  •  2
  • maciejka  · 技术社区  · 6 年前

    我正在使用Claims在ASP.NET Core中开发自己的项目,我引用了以下文章: http://blog.geveo.com/Claim-based-authorization-ASP-core

    我很难理解 Permissions 在步骤05中,因为它在任何地方都没有被定义。有什么想法吗?

    services.AddAuthorization(options =>
    {
        options.AddPolicy(PolicyTypes.Teams.Manage, policy => {
            policy.RequireClaim(CustomClaimTypes.Permission, Permissions.Teams.Manage);
        });
        options.AddPolicy(PolicyTypes.Teams.AddRemove, policy => {
            policy.RequireClaim(CustomClaimTypes.Permission, Permissions.Teams.AddRemove);
        });
        options.AddPolicy(PolicyTypes.Users.Manage, policy => {
            policy.RequireClaim(CustomClaimTypes.Permission, Permissions.Users.Add);
        });
        options.AddPolicy(PolicyTypes.Users.EditRole, policy => {
            policy.RequireClaim(CustomClaimTypes.Permission, Permissions.Users.EditRole);
        });
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   poke    6 年前

    该博客文章的第2步缺少一个将 Users Teams

    public static class Permissions
    {
        public static class Users
        {
            public const string Add = "users.add";
            public const string Edit = "users.edit";
            public const string EditRole = "users.edit.role";
        }
    
        public static class Teams
        {
            public const string AddRemove = "teams.addremove";
            public const string EditManagers = "teams.edit.managers";
            public const string Delete = "teams.delete";
        }
    }
    

    最后,这只是定义了在整个应用程序中用于标识各种权限的公共值。你也可以传递一些字符串,但是让它们集中定义会使使用变得更容易,因为你不需要记住神奇的字符串。