如何使用chmod作为mysql数据类型

时间:2011-04-22 09:54:05

标签: mysql types chmod

我正在创建一个权限表,它复制了linux中使用的“777”方法。

要做到这一点,我想创建一个像:

这样的表

user_id,class1,class2,class3

哪些类可以是网站上需要权限的某些功能。

这看起来是一个好方法吗?这种方法有问题吗?

此外,哪种数据类型最适合此数据。我可以使用INT(3),但我假设没有复制此类事物的“二进制”数据类型

1 个答案:

答案 0 :(得分:5)

使用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'))

在其自己的记录中拥有每个权限,创建PRIMARY KEY约束:

object_id, permission, user_id
object_id, permission, group_id,
object_id, permission

和查询:

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'