0

我选择'个人用户帐户'时使用最新和最大的身份3.x来与股票与MVC6核心1.0。ASP.NET身份和创建角色功能

我的用户身份验证的要求如下:

Users -> AspNetUsers 
Roles -> AspNetRoles 
UserRoles -> AspNetUserRoles 
RoleFunctions -> I don't see a table for this in the Identity db structure 

RoleFunctions是任何类型的系统功能,如DeleteCustomers,AccessToCustomerPage等

我要承担ASP.NET身份不支持基于角色的身份验证的额外步骤,因此我将不得不自己创建表和函数。这是真的吗?还是仅仅是为了我,我只是没有看到它?

+0

我想你指的是** **的政策。我猜你会有一个已知数量的角色函数,它们将在你的代码中被知道(除非你的目标是一些动态)?您可以考虑对它们进行硬编码并创建策略,例如“为了删除客户,用户必须拥有这个,这个和/或这个角色”。看看这里:https://docs.asp.net/en/latest/security/authorization/roles.html#policy-based-role-checks – regnauld

+0

好,所以你说,如果我有一堆全局常量的所有角色功能和使用政策,我不应该需要RoleFunctions表?问题是我需要在功能级而不是角色级执行所有的检查。例如:如果当前登录的用户是包含DeleteCustomer的角色的一部分,则在视图模型中显示垃圾桶。 –

回答

0

Identity允许您根据控制器或控制器中的特定操作确定授权。

[Authorize] 
public void controllermethod(param) {} 

授权将需要身份验证才能访问此操作或控制器。

所以,如果你想创建一个只有管理员可以执行操作(或已创建的任何用户角色组),控制器以上方法你会把

[Authorize(Roles="admin")] 
public void controllerMethod(param) {} 

角色可以接受的列表字符串,如(角色=“管理”,“经理”),所以你可以把多个角色放在一个授权声明中。

您也可以在控制器级别执行此操作,强制控制器中的每个操作都遵守您的授权声明。基本上,如果你把它的控制器声明的每一个动作都会受到影响上面,但你可以白名单与

[AllowAnonymous] 
public void nosecuritycontrolleraction {} 

一个特定的动作,我希望这是你在找什么,你可以在这里找到更好的向导: http://www.asp.net/identity

UPDATE 1 对于DeleteCustomer示例,我假设您在处理删除客户对象的控制器中有一些方法。在这些方法之上,放置[Authorize(Roles =“CustomerAdmin”)],然后只有UserRoles中具有customerAdmin角色的用户可以使用该操作。

喜欢:

[Authorize(Roles="CustomerAdmin")] 
public ActionResult DeleteCustomer(string/int id){} 
+0

这与我正在寻找的东西很接近。你能否更新你的文章以适应这个例子:有一个叫做CustomerAdmin的角色。我在哪里可以指定CustomerAdmin可以执行哪些功能?假设他们可以查看和删除客户。比方说,在ViewModel中,我只想为具有角色CustomerAdmin的用户显示垃圾桶图标。我宁愿做一个检查,说明用户是否具有删除客户功能然后显示垃圾箱的任何角色。这是我的RoleFunctions部分发挥作用的地方。 –

+0

上面我想说的是,我更喜欢在功能级别而不是角色级别执行所有检查。例如:如果当前登录的用户是包含硬编码函数DeleteCustomer的角色的一部分,则在视图模型中显示垃圾箱。你将如何建立一个这样的系统? –

+0

对于DeleteCustomer示例,我假设您在处理删除客户对象的控制器中有一些方法。在这些方法之上,放置[Authorize(Roles =“CustomerAdmin”)],然后只有UserRoles中具有customerAdmin角色的用户可以使用该操作。 –

相关问题