如何解决在ASP.NET Core MVC中使用声明或仅角色
在我的ASP.NET Core MVC项目中,我有这种情况:管理员可以在Web应用程序中执行任何操作,可以将其称为超级管理员,并且只有一个用户。该“超级”管理员可以添加其他受限制更大的管理员,例如,这些管理员无法创建类型管理员的用户,或者看不到某些信息。
从技术上讲,它们有很多共同点。我已经有很多角色类型,所以我不想创建另一个称为超级管理员的角色,在这里我将只创建一个用户。因此,在这种情况下,我应该使用索赔吗?还是只创建两个角色更好?我知道它不会那么复杂,但是我想知道最佳实践。
我是ASP.NET Core的新手,所以我感谢可以帮助我的示例或文章,谢谢!
解决方法
我认为,通过声明或角色声明添加超级管理员之间没有什么区别,角色声明也是声明的一种。
我认为,如果您没有特殊要求,需要按声明添加用户超级管理员,最好的方法是使用声明。由于您可以直接使用[Authorize(Roles = "Superadmin")]
,而无需使用身份工厂来编写其他代码来添加声明。
如果要按声明添加超级管理员,则应使用answer这样的UserClaimsPrincipalFactory并按article所示添加声明策略。
,我建议如果您需要创建许多角色,请使用 Claims-based authorization。
您可以使用Authorize[Roles = "Admin"]
属性,也可以创建自定义AuthorizeAttribute,例如:
public class AuthorizeAccess : AuthorizeAttribute,IAuthorizationFilter
{
public string UniqueCode { get; set; }
public void OnAuthorization(AuthorizationFilterContext context)
{
if (!context.HttpContext.User.HasClaim(c => c.Type == "CustomAccess" && c.Value.Equals(UniqueCode)))
{
// Redirect AccessDenied when the claim not exist.
context.Result = new RedirectToPageResult("/AccessDenied");
return;
}
}
}
我们可以使用它
[AuthorizeAccess(UniqueCode = "EDIT")]
public class IndexModel : PageModel
{
....
}
在这种情况下,您需要在登录访问权限中加载声明列表
identity.AddClaim(new Claim("CustomAccess","HOME_PAGE"));
identity.AddClaim(new Claim("CustomAccess","EDIT"));
identity.AddClaim(new Claim("CustomAccess","DELETE"));
identity.AddClaim(new Claim("CustomAccess","INSERT"));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。