假设我的系统由两种业务对象类型组成:项目和用户。
根据用户许可,他/她可以:
| 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执行任何操作(即使规则仍然存在)。
另一方面,我知道我的目标是过于灵活,但我拒绝接受没有办法实现这种功能。
所以,实际问题:
答案 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)