简体   繁体   English

ASP.NET Core中基于声明的授权

[英]Claim based authorization in ASP.NET Core

I'm developing my own project in ASP.NET Core using Claims and I referenced to the following article: http://blog.geveo.com/Claim-based-authorization-ASP-core 我正在使用Claims在ASP.NET Core中开发自己的项目,并且引用了以下文章: http : //blog.geveo.com/Claim-based-authorization-ASP-core

It is difficult for me to understand, from where we have Permissions in step 05, because it wasn't defined earlier anywhere. 对于第05步中的“拥有Permissions位置,我很难理解,因为之前没有在任何地方定义它。 Any ideas? 有任何想法吗?

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);
    });
}

Step 2 from that blog post is missing a class that wraps both the Users and Teams class. 该博客文章的步骤2缺少一个同时包装UsersTeams类的类。 It should look like this: 它看起来应该像这样:

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";
    }
}

In the end, this just defines common values to be used throughout the application to identify the various permissions. 最后,这仅定义了将在整个应用程序中使用的通用值,以标识各种权限。 You could also just pass some strings, but having them defined centrally makes it easier to use since you don't need to remember magic strings. 您也可以只传递一些字符串,但是由于不需要记住魔术字符串,因此集中定义它们可以使使用更加容易。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM