asp.net-mvc - 如何最好地处理 asp.net 成员中的权限(而不是角色),特别是在 ASP.NET MVC 中

标签 asp.net-mvc asp.net-membership asp.net-roles asp.net-authentication

关于设置 asp.net 成员资格、角色提供者等有很多问题(和信息)。不管你是应该使用微软提供的内置平台,还是角色扩展你自己的基类和角色。

我决定扩展默认提供者并实现我自己的成员资格和角色提供者。现在我的问题是专门针对角色身份验证的。

传统上,您会创建角色,例如“经理、管理员、员工、 super 用户”或任何您拥有的角色。但是对于我认为是更精细控制的权限,您会/应该做什么?让我详细说明....

在我的 asp.net mvc 站点中,我有不同的区域,如管理、管理、消息传递、报告等。我会为每个角色创建角色,如“管理员”、“经理”、“报告者”等。没有适当的角色,你可以'无法访问该站点的该区域。所以我会在类里面用这个来锁定整个 Controller 。

但现在以一个地区为例;消息传递,并说我想为 CRUD 获得更细粒度的权限;创建消息、查看/阅读消息、编辑消息、删除消息等。

最后是我的问题。如何最好地实现这种更精细的控制?我看到的一种方法(不确定它是否好用)是为所有内容创建 asp.net 成员角色。所以我可能有....

Messenger(广义角色)、CreateMessage、ReadMessage、EditMessage、DeleteMessage。

一方面,我希望一些用户能够阅读/查看消息。但不一定创建或删除它们。单个 Controller 操作可以应用特定的角色。

你觉得这种方法有什么问题吗?你有更好的主意吗?

到目前为止的解决方案

我决定创建自己的模式并实现自定义成员资格和角色提供程序。我的架构包括;

  • 用户
  • 用户个人资料
  • 权限
  • 权限分配
  • 角色
  • 角色分配

  • 接下来一两天会离开,但如果有机会,我会更新更多信息。

    最佳答案

    我认为你应该忘记授权机制上的角色,而是请求权限(最后,角色是权限的集合),所以如果你这样看,你的 Authorize属性应该要求一个实体和 Action ,而不是一个特定的角色。就像是:

    [Authorize(Entities.Message, Actions.Create)]
    public ActionResult CreateMessage()
    
    [Authorize(Entities.Message, Actions.Edit)]
    public ActionResult EditMessage()
    
    [Authorize(Entities.Message, Actions.View)]
    public ActionResult ViewMessage()
    

    这样,您的角色就可以做他们最擅长的事情,抽象权限集合,而不是确定一种不灵活的访问级别方式。

    编辑:处理特定规则,如 David Robbins 指出的,不允许 Manager A 删除 Manager B 创建的消息,假设他们都具有访问此 Controller Action 所需的权限,Authorize 不负责检查此类规则,即使您尝试在 Action Filter 级别检查它也会很痛苦,所以您可以做的是将 Authorize 验证扩展到 ActionResult(注入(inject)保存验证结果的操作参数),并让 ActionResult 做出逻辑决策那里有所有的论点。

    This是一个类似的问题,并不完全是这里指出的情况,但它是使用操作参数扩展授权验证的一个很好的起点。

    关于asp.net-mvc - 如何最好地处理 asp.net 成员中的权限(而不是角色),特别是在 ASP.NET MVC 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298203/

    相关文章:

    c# - 在强类型 MVC View 用户控件中使用值类型

    javascript - 如何在 MVC 中的 JavaScript 中的 url.action 中传递多个参数?

    c# - 我应该如何将用户与域对象相关联?

    asp.net-mvc - Asp.net MVC 让用户在角色之间切换

    asp.net-mvc - GenericPrincipal 角色在 MVC View 中不可用

    c# - 检查 Razor 中模型列表项的计数

    asp.net-mvc - 在多个表单上指定验证摘要

    asp.net-membership - 黑客是否有可能解密 ASP.NET 成员(member)密码?

    asp.net - System.Web.Providers 在中等信任度下不起作用

    c# - 用户 IsInRole 仅在从网站登录和注销后才有效