繁体   English   中英

Asp.net MVC-如何在不知道这些角色的情况下获得用户角色?

[英]Asp.net MVC - How can I get user roles without knowing these roles?

我正在从事这个项目,管理员用户可以创建一些将作为项目角色的用户组。

因此,管理员将创建一个名为“ SuperAdmin”的用户组,并将在下拉列表中选择将成为该组一部分的用户。

我以前在使用RoleProvider和Controller的Attibutes的解决方案中工作,但是在那种情况下,我创建了所有组并在Controller中手动设置,例如:

[Access(Roles = "SuperAdmin")]
public UserController : Controller
{
}

在上面的示例中,我知道该组名为“ SuperAdmin”。 但是,现在,在这个新项目中,我不知道管理员用户将创建哪些组。

那么,如何获得允许用户动态访问的所有角色?

谢谢!

如果我正确理解了您的问题,则希望对值“ SuperAdmin”进行软编码。

我遇到了类似的问题,因为我想验证用户是否可以访问某个资源(称为文档),但是在应用程序开发过程中该资源的ID是未知的。 我通过创建自己的基于表的安全性并将其核心逻辑放入我的模型(实际上是业务逻辑层)中来解决了该问题。 这使我能够安全修剪数据库中的数据检索,并在用户请求其无法访问的资源时重定向用户。

如果仍要使用属性来执行此操作,则可以创建一个自定义属性(对ASP.NET MVC使用的属性进行建模),该属性从数据库中查找适当的权限并进行确定。

或者,您可以使用以下方法在controller方法内部进行操作:

Public ActionResult EditThing(int ID)
{
    ThingRepository repository = new ThingRepository();

    If (!repository.UserHasAccess(int ID))
       Return View("NotAuthorized")
    //
    // Do stuff here
}

如果需要有关存储库的更多信息,请参见NerdDinner教程

此处更多信息: ASP.NET MVC中基于文档的安全性

您是否考虑过编写自己的属性以装饰动作?

在那种情况下,您可以使用该属性获取用户的访问权限,将其与页面访问表进行匹配,然后返回结果,并允许或拒绝对页面/操作的访问。

我认为您将需要一个表来确定角色可以访问哪些页面,哪些页面可以与用户分配给的角色进行交叉引用。

或者,您可以通过这样的方式来编写属性,以便它规定允许查看页面的角色。

[MyAccessAttribute(Allow="SuperUser", "Admin")]
public ActionResult MyAction()

这有帮助/有意义吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM