我目前正在创建一个权限表,它复制了linux中使用的"777"方法.
要做到这一点,我想创建一个像这样的表:
user_id,class1,class2,class3
哪些类可以是网站上需要权限的某些功能.
这看起来像是一个好方法吗?这种方法有问题吗?
此外,哪种数据类型最适合此数据.我可以使用INT(3),但我假设没有"二进制"数据类型可以复制这种类型的东西
使用 set('ru', 'rg', ro', 'wu', 'wg', 'wo', 'xu', 'xg', 'xo', 'sgid', 'suid', 't')
这是位优化的.
但是,如果您需要过滤单个权限(例如"选择可以从此处读取的所有用户"),则最好将其实现为普通的多对多表:
user_permissions (object_id, user_id, permission ENUM ('r', 'w', 'x'))
group_permissions (object_id, group_id, permission ENUM ('r', 'w', 'x'))
other_permissions (object_id, permission ENUM('r', 'w', 'x', 'sgid', 'suid', 't'))
Run Code Online (Sandbox Code Playgroud)
在自己的记录中使用每个权限,创建PRIMARY KEY约束:
object_id, permission, user_id
object_id, permission, group_id,
object_id, permission
Run Code Online (Sandbox Code Playgroud)
和查询:
SELECT u.id
FROM user_permissions up
JOIN users u
ON u.id = up.user_id
WHERE object_id = $object
AND permission = 'r'
UNION
SELECT g.user_id
FROM group_permissions gp
JOIN user_groups ug
ON ug.group_id = gp.group_id
WHERE object_id = $object
AND permission = 'r'
UNION
SELECT u.id
FROM users u
JOIN other_permissions op
ON object_id = $object
AND permission = 'r'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |