首页 > 解决方案 > ASP.NET Core 中基于声明的授权

问题描述

我正在使用 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);
    });
}

标签: c#asp.net-coreasp.net-core-webapiclaims-based-identity

解决方案


该博客文章的第 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";
    }
}

最后,这只是定义了在整个应用程序中用于识别各种权限的通用值。您也可以只传递一些字符串,但是集中定义它们会更容易使用,因为您不需要记住魔术字符串。


推荐阅读