6

我正在一个站点上工作,该站点将具有几个模块,这些模块对某些用户完全可用,对其他用户半可用,而对其余用户不可用。

例如:

  • “员工”能够响应分配给他的客户支持票证。

  • “经理”能够管理其团队中的所有员工和支持工单,包括查看特定员工的工单。

  • “管理员”能够管理所有团队中的所有经理、员工和工单,以及其他一些核心功能。

此外,如果当前用户是管理员或经理,则在某些页面上会显示一些附加字段。(例如删除/标记事物的链接)。这些不会显示给员工。

我想创建一个“权限”模型来处理以下逻辑:

  • 确定用户是否可以访问当前页面。

  • 确定是否应显示页面的特定部分。(例如,编辑/删除的特殊链接只显示给管理员和经理)。

我需要一些建议/建议来设计这个类,特别是它应该有什么方法来完成第二个要求。

4

3 回答 3

3

从数据库的角度来看,我解决这个问题的方法是有一个包含用户列表的用户表,一个用于角色列表的角色表,例如:员工、经理、管理员;和权限表,其中存储系统中可用的每个操作/功能的所有值及其对特定角色的权限,例如:对于管理员,操作/功能(如创建、编辑、删除、查看)的值都是 true。关系如下所示,而 (N) ---- (N) 是多对多关系。

用户 (N) -------- (N) 角色 (N) -------- (N) 权限

于 2011-04-21T02:02:47.617 回答
3

当它出现时,我处理这个问题的方法是给出每个可以采取的行动或可以显示它自己的信息Permission。然后每个User人都有一个集合Permissions。由此,您可以添加其他结构层来帮助管理将存在的大量权限,例如权限的层次结构或类别。

一旦到位,您可以让各个部分询问User他们是否具有所需的权限,或者您可以PermissionManager获取UserPermissions确定给定用户是否具有所需的权限Permissions。无论哪种方式都可以正常工作,但是您选择哪种方式会对依赖关系和系统架构产生影响。

PermissionManager方法的优点是您的应用程序片段不需要依赖 a User,因此您可以使用PermissionManager始终返回的不同的,False如果没有适当的权限,或者True如果所有权限都是适当的。

对于简单的情况,这种方法可能有点矫枉过正,起初看起来似乎是这样,但我已经走上了使用基本分层或粗粒度角色的路线,并且我喜欢几乎我工作过的每个系统也很快得到了对于大多数普通的、预先构建的基于角色的权限系统来说很复杂。

于 2011-04-18T14:12:51.477 回答
0

我的印象是您需要使用角色,例如员工、经理和管理员。所以一个带有这些的角色表就可以了。然后对于特定的操作/权限,您将不得不使用分支逻辑,例如对于您将拥有的员工 if User.IsInRole("employee") // 插入逻辑来处理客户支持票 else if User.IsInRole( "manager") // 插入处理经理职责的逻辑

最后是处理管理员职责的逻辑

所以你需要用户表和角色表来实现这一点。希望能帮助到你

于 2011-04-18T14:20:19.443 回答