php - 基于信誉实现权限

我正在创建一个网站,其中包含每个用户或用户组的项目、用户和权限。这是一个社区协作工具,我有 4 种不同的权限:

  • 创建者 - 进行更改、接受更改、更改权限
  • 接受更改
  • 进行更改
  • 查看

如何在数据库中为用户组实现这种权限系统?

编辑:组/权限由信誉定义,例如在 StackOverflow 上。

编辑2-更详细:每个文件都需要有权限,项目需要新建文件的默认权限,我还需要设置MySQL数据库权限。

最佳答案

user_table
id, etc

permission table
id, user_id, permission_type

使用这种结构,每个用户都可以拥有与其帐户相关联的多种权限类型,每个权限类型对应于他们可以访问的每组功能。您永远不需要更改表结构来添加新类型的权限。

为了更进一步,您可以将每种类型的权限设置为二进制数。这样,您可以使用按位运算符使一组权限由一个整数表示。

例如,如果你有常量

PERMISSION_CHANGE_PERMISSIONS = bindec('001') = 1
PERMISSION_MAKE_CHANGES = bindec('010') = 2
PERMISSION_ACCEPT_CHANGES = bindec('100') = 4

您可以使用按位运算符“|”将这些值组合成一个整数

(PERMISSION_CHANGE_PERMISSIONS | PERMISSION_MAKE_CHANGES) = bindec('011') = 3 = $users_combined_permissions

然后要检查他们是否有特定的权限,请使用按位运算符“&”

($users_combined_permissions & PERMISSION_MAKE_CHANGES) = true

如果您这样做了,那么每组权限只需要一个 db 记录。

https://stackoverflow.com/questions/6005240/

相关文章:

MySQL 日期格式 - 插入日期的困难

sql - SQL UPDATE中的str_replace?

mysql - 如何在 CentOS7 上更改 MySQL root 帐户密码?

php - 获得上个月的第一天和最后一天的最佳方式?

mysql - CakePHP - 获取最后一个查询运行

mysql - 导入 CSV 以仅更新表中的一列

mysql - Rails 控制台通过 id 数组查找用户

mysql - 为 mysql/模糊搜索实现 Levenshtein 距离?

sql - 在子查询中引用外部查询的表

mysql - 如果需要太长时间,如何停止 MySQL 查询?