我们了解如何使用WebApi在ASP.NET身份中实现身份验证和授权。 例如,我们可以登录用户,然后检索他的安全令牌和角色。
我们现在想要添加权限。例如,用户 steve 可能属于 admin 角色。现在,我们要为管理员角色分配读取,编辑和删除权限。我们如何在ASP.NET身份中做到这一点? ASP.NET Identity中是否存在现有的权限基础结构?
答案 0 :(得分:11)
我扩展了ASP.NET Identity,以便在描述时允许权限。我这样做是为了将安全模型与应用程序模型分离。将角色放入AuthorizeAttribute的传统方法的问题是您必须在设计应用程序的同时设计安全模型,如果进行任何更改,则必须重新编译和重新部署应用程序。通过我提出的方法,您可以在自定义AuthorizeAttribute中定义资源和操作,其中操作类似于权限。现在你装饰这样的方法:
[SimpleAuthorize(Resource = "UserProfile", Operation = "modify")]
public ActionResult ModifyUserProfile()
{
ViewBag.Message = "Modify Your Profile";
return View();
}
然后,您可以将资源/操作分配给数据库中的角色,在部署期间配置安全模型,并且可以在不重新部署的情况下对其进行修改。我wrote about this approach using SimpleMembership here。后来ported it to ASP.NET Identity here。这些文章链接到完整的源代码和参考应用程序。
答案 1 :(得分:0)
我们可以使用基于角色的授权,如
[Authorize(Roles = "Administrator")]
public class StoreManagerController : Controller
{
// Controller code here
}
我们可以为权限创建枚举项目,如:
public enum PermissionItems
{
[Group("Users")]
[Description("Can edit Users")]
EditUser,
[Group("Users")]
[Description("Can view Users")]
ViewUser,
}
然后我们可以根据角色在数据库中添加这个枚举值。
并按属性
检入方法RequirePermissions(PermissionItems.EditUser)
public ActionResult Edit(int id)
{
}
答案 2 :(得分:0)
我发现this链接是适用于dotnet核心的好方法,可以应用于dotnet框架。 通过这种方法,我们需要的所有内容都与在Identity内实现的声明有关,因此无需扩展Identity。
答案 3 :(得分:0)
我来过这里,我相信还有更多人对这个问题感到困扰。
Identity Framework 是基本且完整的,您基本上可以构建一个复杂的应用程序,而无需扩展其底层模型。保持简单愚蠢:
角色就是角色,声明就是声明,但是 RoleClaim
表究竟存储了什么?那么它存储特定角色的声明。这些声明基本上可以是权限。保持简单。举个例子:
在这样的字典中具有预定义的权限:
public static class PredefinedClaims
{
public static dynamic Get = new Dictionary<string,Claim>{
{"PermissionToWrite", new Claim("PermissionToWrite","Write") },
{"PermissionToRead", new Claim("PermissionToWrite","Read") },
};
}
假设您有一个名为 User
和 Id=1
的角色。您可以通过将该角色与声明相关联来创建权限。像这样:
var GrantPermissions= new List<RoleClaim>(){
new RoleClaim{
RoleId = 1,
PredefinedClaims.Get()["PermissionToWrite"].ClaimType, // <= Set the Permission Type
PredefinedClaims.Get()["PermissionToWrite"].ClaimType // <= Granted Edit rights.
},
// Add more roleclaims intances here
}
然后您可以将 GrantPermissions
持久化到您的数据库中,它们将被添加到您的身份中。您需要做的就是按照正常程序在 startup.cs 中注册您的政策声明。