c# - 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);
});
}
解决方案
该博客文章的第 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";
}
}
最后,这只是定义了在整个应用程序中用于识别各种权限的通用值。您也可以只传递一些字符串,但是集中定义它们会更容易使用,因为您不需要记住魔术字符串。
推荐阅读
- javascript - Check for the image in an HTML document
- email - Drupal 8 - 简单的 fb 连接不发送“欢迎邮件”
- git - 如何快速刷新与一个 git-repo 相关的多个工作目录
- angular - 函数返回不需要的数据
- java - Select data with ZonedDateTime
- mysql - 在 mySQL 中组合表以保持空值
- javafx - 使用路径的带圆角的矩形作为 ProgressBar
- php - 如何删除表格上的多余标题
- javascript - 对象数组的 Eslint 规则
- firebase - 来自 OAuth2 游乐场的 Firebase 不记名令牌