繁体   English   中英

具有多个角色/权限的用户管理的用户表设计

[英]User Table design for user management with multiple roles/privileges

尝试设置用户登录和管理...

我想知道您将用于具有复杂用户角色的用户管理的表设置。

我想拥有多个级别的用户权限/角色,并且如果需要,每个级别内都有更详细的控件。

我把这组特权描绘成一张桌子。 行是资源,列是属性和可用操作。 我想设计一个系统,用户可以访问具有特定权限的一组资源,并可能拥有多个具有不同权限的组。

我正在研究modx处理用户表的方式,但这可能有点复杂。

我最近解决了这个问题,并最终使用了一个近似基于角色的访问控制的解决方案

从广义上讲,我实施的系统被描述为

  • 主题:具有验证能力的实际用户,例如,使用密码进行身份验证
  • 权限:代表任何受控资源; 如果用户拥有权限,则她有权使用该资源;
  • 角色:主体和权限之间的联系; 每个角色都分配了一组主题,权限和其他角色;

要理解的重要一点是角色分配; 从一个角色到另一个角色的联系, 不是反身的; 父角色中的主体可以访问子角色中的权限,但不是相反,主体未通过这些主题分配给的角色的父级授权。 一个附加的约束是不允许角色从自身继承; 虽然这只是为了让人们很容易理解角色的结果图,并避免意外地向大群主题授予权限。

通过权限的正确组合,这表明非常具有表现力; 您可以拥有角色来授予一般访问权限,以及授权更具体的动词或对象; 然后你的应用程序检查以确保主题具有所有必需的权限(可以访问,可以执行此操作,可以修改该对象)

角色最终采取的结构是部分顺序; 一个简单的邻接角色列表原来是一个查询主题权限的不方便的方法(在MySQL上,它将运行的地方),所以我还必须设计一组触发器来保持第二个关系是最新的表达角色分配的传递性结束。

更新:

似乎角色的递归结构增加了比它解决的更复杂,至少对于这个特定的应用程序,因为角色主要由客户支持管理,而不是由应用程序设计本身管理。 我目前实现它的方式,用户可以在组中,每个组都有一组权限分配给它。 每个“分配”都有一个优先级,可以授予或拒绝相应的权限。 优先级最高的权限获胜。 架构粗略地说:

CREATE TABLE user (
    username VARCHAR PRIMARY KEY,
    hashedpassword VARCHAR);

CREATE TABLE groups (
    groupname VARCHAR PRIMARY KEY );

CREATE TABLE user_groups (
    username VARCHAR PRIMARY KEY REFERENCES user(username),
    groupname VARCHAR PRIMARY KEY REFERENCES groups(groupname),

CREATE TABLE permission (
    permissionname VARCHAR PRIMARY KEY,
    defaultpolicy BOOLEAN );

CREATE TABLE group_permission (
    permissionname VARCHAR PRIMARY KEY REFERENCES permission(permissionname),
    groupname VARCHAR PRIMARY KEY REFERENCES groups(groupname),
    priority INTEGER,
    policy BOOLEAN );

非递归结构有效地简化了解决权限的问题;

(
SELECT policy, priority 
FROM group_permission
JOIN user_groups ON user_groups.groupname = group_permissions.groupname
WHERE username = :username
AND permissionname = :perm

UNION

SELECT 
    defaultpolicy as policy,
    (SELECT min(priority) - 1 FROM group_permission) as priority
FROM permission
WHERE permissionname = :perm
)
ORDER BY priority DESC
LIMIT 1

暂无
暂无

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

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