Asp.Net Core--基于角色的授权
翻译如下:
当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色。 如何创建和管理这些角色取决于授权过程的后备存储。 角色通过ClaimsPrincipal类上的IsInRole属性公开给开发人员。
添加角色检查
基于角色的授权检查是声明性的 - 开发人员将它们嵌入到他们的代码中,针对控制器中的控制器或动作,指定当前用户必须是访问请求资源的成员的角色。
例如,以下代码将只允许Administrator组成员的用户进行操作的访问。
[Authorize(Roles = "Administrator")] public class AdministrationController : Controller { }
作为一个逗号分隔的列表,您可以指定多个角色:
[Authorize(Roles = "HRManager,Finance")] public class SalaryController : Controller { }
此控制器只能由属于HRManager角色或Finance角色成员的用户访问。
如果应用多个属性,则访问用户必须是指定的所有角色的成员; 以下示例要求用户必须是PowerUser和ControlPanelUser角色的成员。
[Authorize(Roles = "PowerUser")] [Authorize(Roles = "ControlPanelUser")] public class ControlPanelController : Controller { }
您可以通过在操作级别应用其他角色授权属性来进一步限制访问:
[Authorize(Roles = "Administrator, PowerUser")] public class ControlPanelController : Controller { public ActionResult SetTime() { } [Authorize(Roles = "Administrator")] public ActionResult ShutDown() { } }
在上面的代码片段中,Administrator角色或PowerUser角色的成员可以访问控制器和SetTime操作,但只有Administrator角色的成员才能访问ShutDown操作。
您还可以锁定控制器,但允许匿名,未经身份验证的访问各个操作。
[Authorize] public class ControlPanelController : Controller { public ActionResult SetTime() { } [AllowAnonymous] public ActionResult Login() { } }
基于策略的角色检查
角色条件要求也可以使用新的策略语法表示,其中开发人员在启动时将策略注册为授权服务配置的一部分。 这通常配置在Startup.cs文件中的ConfigureServices()。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddAuthorization(options => { options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Administrator")); }); }
使用“AuthorizeAttribute”属性上的“Policy”属性应用策略;
[Authorize(Policy = "RequireAdministratorRole")] public IActionResult Shutdown() { return View(); }
如果要在条件需求中指定多个允许的角色,则可以将它们指定为RequireRole方法的参数;
options.AddPolicy("ElevatedRights", policy => policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));
此示例授权属于“Administrator”,“PowerUser”和“BackupAdministrator”角色的用户。