【发布时间】:2012-03-22 09:49:55
【问题描述】:
假设我的系统由两种业务对象类型组成:projects 和 users。
根据用户权限,她/他可以:
| 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 做任何事情(即使规则仍然存在)。
另一方面,我知道我的目标是在这方面提供太多的灵活性,但我拒绝接受没有办法实现这种功能。
所以,实际问题:
- 这是个好主意吗?
- 有更好的系统吗?
- 还有其他建议吗?
【问题讨论】:
标签: php mysql permissions roles