【问题标题】:Where and how to store User Permissions?在哪里以及如何存储用户权限?
【发布时间】:2012-03-22 09:49:55
【问题描述】:

假设我的系统由两种业务对象类型组成:projectsusers

根据用户权限,她/他可以:

| 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


【解决方案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)

【讨论】:

  • 嗯,这是一个有趣的想法;在我正在使用的软件中使用现有的 ACL。一个项目只是一个设置列表:用户首选项 + 项目类型 + 构建目标 + 登录凭据(例如,通过 FTP/SSH 等连接)。
  • 我会完全使用内置凭据。 Mysql 已经彻底测试了他们的安全系统,所以你不必这样做。如果您希望通过安全审核而不会感到头疼和不眠之夜,请使用内置 ACL。如果您对内置 ACL 有任何疑问,我可以回答其中的一些问题。
猜你喜欢
  • 2023-03-14
  • 2011-01-23
  • 2021-05-04
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2011-01-05
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多