Database design 使用RBAC控制对个人资源的访问

Database design 使用RBAC控制对个人资源的访问,database-design,rbac,Database Design,Rbac,我试图理解RBAC,然后在我的项目中实现一个RBAC,但目前感到困惑 以论坛为例。在论坛中,会员可以发布帖子,并编辑或删除他们发布的帖子。和版主也可以发布一个线程,并编辑或删除任何成员的线程 我在网上搜索了一下,找到了一个简单的RBAC模型,其中有用户、角色和操作,然后我得到了如下的数据库模式: user(user_id, ...) role(role_id, ...) user_role(user_id, role_id, ...) operation(operation_id, operat

我试图理解RBAC,然后在我的项目中实现一个RBAC,但目前感到困惑

以论坛为例。在论坛中,会员可以发布帖子,并编辑或删除他们发布的帖子。和版主也可以发布一个线程,并编辑或删除任何成员的线程

我在网上搜索了一下,找到了一个简单的RBAC模型,其中有用户、角色和操作,然后我得到了如下的数据库模式:

user(user_id, ...)
role(role_id, ...)
user_role(user_id, role_id, ...)
operation(operation_id, operation, ...)
role_operation(role_id, operation_id, ...)
在手术台上,我有

(..., 'thread/post')
(..., 'thread/edit')
(..., 'thread/delete')
在代码中,我有

if ($user->isPermitted('thread/delete') {
    // delete thread
}
这似乎很好,直到我发现每个用户都可以删除线程,无论谁张贴它。为了修复它,我可能会修改手术表如下

(..., 'thread/post')
(..., 'thread/38900/edit')
(..., 'thread/52529/delete')
38900和52529是螺纹的id。我必须添加另一个表:

user_operation(user_id, operation_id)
为了将所有权限授予版主(作为角色),我必须为发布的每个线程插入role\u操作


因此,我的问题是,使用RBAC,如何正确设计数据库,使成员只能编辑/删除自己的线程,并且版主能够编辑/删除任何线程?

您应该研究基于属性的访问控制(ABAC)。它可以满足你的需要for@DavidBrossard是的,这就是我一直在寻找的,谢谢。XACML实现了ABAC,所以也检查一下。ALFA是实施您的政策的简单方法。