2

这在 Web 应用程序开发中是很常见的事情。我已经做过很多次了。

但是我被困在我当前的项目中为此设计模式。

问题是我的应用程序一开始会有三种类型的用户,例如超级管理员、管理员和普通用户。

我计划将这些用户类型作为角色,如 ROLE_SUPERADMIN、ROLE_ADMIN 和 ROLE_USER。

系统可以有很多角色。事实上,SuperAdmin 和 Admins 创建角色并将这些角色分配给用户。

问题是,

超级管理员将拥有 p1、p2 和 p3 的权限。超级管理员可以创建其他超级管理员。超级管理员可以创建管理员。超级管理员不会在系统中添加用户。

管理员可以拥有 p5、p6 和 p7 权限。管理员无法创建其他管理员。管理员可以创建其他用户。管理员还可以创建诸如报告查看者之类的角色。

具有 p1、p2 和 p3 权限的超级管理员应该能够创建具有 p5、p6 和 p7 权限的管理员。我不太明白。

逻辑上,当超级管理员自己没有权限 p5、p6 和 p7 时,他们如何创建具有这些权限的管理员?

请帮助我进行正确的设计。

以下是我到目前为止的设计。

USER 用户
ID 角色 ID

ROLE
RoleID RoleName

权限PermissionID
PermissionName

ROLE_PERMISSION RoleID PermissionID

谢谢。

4

3 回答 3

3

这是一个加载的问题,设置成员、角色等是不小的壮举。我建议您查看已经编写的库,看看它们是否适合您的需求。您应该开始搜索的是“访问控制列表”(acl)的简称。

于 2012-02-17T06:20:33.017 回答
2

您应该研究授权框架和标准,例如 XACML - XACML 允许您基于多个属性定义授权,这样您就不会最终导致角色爆炸。因此,您可以创建规则,而不是创建角色 manager_in_tx_with_gold_status,例如:

具有角色=经理和位置=TX 的用户可以对资源执行操作=查看...。

也有几种供应商解决方案和开源解决方案。查看 Wikipedia 页面和标准主页以获取更多信息:

我也有一个谈论 XACML 的 Youtube 频道:

于 2013-06-30T18:12:54.067 回答
2

一旦设计了这样的数据库;

我安装了一些论坛、门户和 CMS 脚本并分析了它们如何处理这种情况,然后提取 DB 模式并将它们用作参考。

可能这可以帮助

于 2012-02-17T06:49:00.403 回答