【问题标题】:Permissions for roles in .NET.NET 中的角色权限
【发布时间】:2011-08-02 20:39:15
【问题描述】:

我正在使用标准的 .NET 身份验证数据库表和代码,以及 .NET 4.0、C# 和 MVC 3。

基本上,我想拥有角色(包括在框架中),然后能够为这些角色分配权限(据我所知,这些角色不包括在内)。

所以我想为角色分配权限。会计角色的用户不能编辑和删除员工,但管理员角色的用户可以。由于这些权限可能随时更改,因此我不想检查User.IsInRole("Administrator"),而是执行User.HasPermission("EditEmployee") 之类的操作。

我可能自己设计一些自定义表和代码,但如果 .NET Framework 已经内置,我宁愿使用它。有这样的吗?如果没有,是否有一个库可以 这样做?

【问题讨论】:

  • @djacobson - 是的,我看到了那个帖子。虽然它是在 2 年前发布的,所以我不知道从那时起 .NET 4.0 是否包含此功能,或者第三方是否将此功能开发为库。
  • 看到这个帖子一次stackoverflow.com/questions/3298203/…
  • 我创建了自己的框架来执行此操作,看起来像角色 api,但使用了权限。大多数应用似乎都实现了自己的类来执行此操作,因为它比简单的角色检查增加了更多的灵活性。

标签: c# .net asp.net


【解决方案1】:

内置的 RoleProvider 确实没有提供一种干净的方式来执行此操作。真正使用 RoleProvider 的唯一方法是创建诸如“Employees_CanEdit”和“Employees_CanAdd”之类的角色,但最终你会得到一堆乱七八糟的角色。

不过,还有其他方法可以让您的角色获得权限。您可以创建一个表来链接用户、角色(“Employees”)和权限(“Add”或“Edit”)。然后你可以实现类似的东西:

public bool HasPermission(string role, string permission) {
    // Some sql for accessing the table
    // return true if a row exists that matches the user, the role, and the permission
}

【讨论】:

    【解决方案2】:

    也许您可以简单地向可以编辑员工的用户添加另一个角色。像“CanEditEmployee”这样的东西,然后验证用户是否在角色“CanEditEmployee”?当我必须做类似的事情时,我会这样做。

    【讨论】:

    • 也许这应该是要走的路。我正在尝试模仿我见过的现有角色/权限提供程序,但这可能太复杂了。最后,角色只是权限的集合。我想我会将 .NET Roles 表用于“权限”,然后出于显示目的,我将为“角色”创建一个自定义表,该表将与多个权限相关。
    • 是的!就像 Zachary 比我解释得更好,据我说,他所做的是更好的方法。至少是最简单的。
    【解决方案3】:

    通常当我想做这样的事情时,我使用下划线符号“_”创建子角色,分段子角色提供的额外权限/功能。

    例子:

    管理员 管理员_EditEmployee 管理员_启用任务 等等……

    然后,我会解析管理页面中的名称,以便获得格式良好的嵌套树视图/下拉列表,然后将其分配给不同的用户。这样,您就可以继续使用内置的安全系统,而无需在管理页面中添加除一些解析逻辑之外的任何特殊内容。

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 2014-02-03
      • 2018-01-18
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多