相关疑难解决方法(0)

基于声誉实现权限

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

  • 创建者 - 进行更改,接受更改,更改权限
  • 接受更改
  • 做出改变
  • 视图

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

编辑:组/权限由信誉定义,如StackOverflow.

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

php mysql sql permissions

44
推荐指数
1
解决办法
1万
查看次数

ACL的数据库模式

我想为ACL创建一个模式; 但是,我在几种实现方式之间徘徊.

我很确定我不想处理级联权限,因为这会导致后端和网站管理员的混乱.

我想我也可以和用户一起生活在一个角色中.像这样的设置将允许在网站增长时根据需要添加角色和权限,而不会影响现有角色/规则.

起初我打算对数据进行规范化,并有三个表来表示关系.

ROLES { id, name }
RESOURCES { id, name }
PERMISSIONS { id, role_id, resource_id }
Run Code Online (Sandbox Code Playgroud)

用于确定某个用户是否被允许的查询将如下所示:

SELECT id FROM resources WHERE name = ?
SELECT * FROM permissions WHERE role_id = ? AND resource_id = ? ($user_role_id, $resource->id)
Run Code Online (Sandbox Code Playgroud)

然后我意识到我将只有大约20个资源,每个资源最多有5个动作(创建,更新,查看等等),也许还有8个角色.这意味着我可以公然无视数据规范化,因为我永远不会有超过几百条可能的记录.

所以也许这样的架构会更有意义.

ROLES { id, name }
PERMISSIONS { id, role_id, resource_name }
Run Code Online (Sandbox Code Playgroud)

这将允许我在单个查询中查找记录

SELECT * FROM permissions WHERE role_id = ? AND permission  = ? ($user_role_id, 'post.update')
Run Code Online (Sandbox Code Playgroud)

那么哪一个更正确?ACL还有其他架构布局吗?

mysql acl

27
推荐指数
2
解决办法
3万
查看次数

标签 统计

mysql ×2

acl ×1

permissions ×1

php ×1

sql ×1