存储用户权限的位置和方式?

时间:2012-03-04 19:04:58

标签: php mysql permissions roles

假设我的系统由两种业务对象类型组成:项目用户

根据用户许可,他/她可以:

| Action          | Role             |
|-----------------|------------------|
| view projects   | Clients          |
| edit projects   | Devs             |
| manage projects | Managers         |
| manage users    | Administrators   |

问题是,客户只能看到一些特定的项目。可以将项目设置为公共项目(每个人都可以看到它们),也可以将项目设置为对某些特定客户端可见。

与开发人员相同,开发人员可以编辑自己的,以及管理员设置的其他项目。管理员应该能够创建和管理用户/项目,除非管理员明确否认管理员对特定项目的能力。 管理员可以完全访问系统上的任何内容,包括所有用户和所有项目。


这正是我想要实现的目标。 “怎么样”让我担心。

通常,对于角色,您将在用户表中具有“角色”列,该列将指定用户具有的角色类型。由于我们不会同时拥有开发人员,因此该列不需要是位掩码。

下一步是建立一个规则系统,根据用户的角色指定用户可以访问的内容。在现有的表中没有这个(没有数组字段 - 有点脏),所以我想我需要一个单独的表。

这看起来像是:

| user_id | access  | object_type | object_id |
|---------|---------|-------------|-----------|
| 45      | allowed | user        | 42        | user 45 can manage user 42
| 42      | denied  | project     | 30        | user 42 cannot do anything with
                                                project 30

该表必须与用户角色一起使用。例如,如果用户45是客户端,则他无法对用户42执行任何操作(即使规则仍然存在)。


另一方面,我知道我的目标是过于灵活,但我拒绝接受没有办法实现这种功能。

所以,实际问题:

  • 这是个好主意吗?
  • 有更好的系统吗?
  • 还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

这些项目是什么组成的?数据库,文件和文件夹,还是什么?

这些项目是数据库项目还是别的什么?

数据库简要

CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';


GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%';
GRANT ALL PRIVILEGES ON project1.* TO 'user1'@'%';
GRANT ALL PRIVILEGES ON project2.* TO 'user2'@'%';

(可选)WITH GRANT OPTION;


如果这些项目包含文件和文件夹,那么您应该使用文件系统权限。 您使用的操作系统和文件系统是什么? Linux文件系统。

chgrp  (change group)
chown   (change owner)