3

我已经阅读了一些关于基于角色的访问控制的文章,但是对于处理这种情况还不够清楚:如何实现“用户可以删除自己的帖子”?

对于普通的角色和权限,当用户做某事时,我可以检查用户是否拥有角​​色和权限,判断用户是否可以做。

但是对于“用户可以删除自己的帖子”,我必须检查帖子是否属于他。所以我必须硬编码一些东西,然后它就脱离了控制系统的控制。

我是否错过了什么以及如何正确地做到这一点?

4

2 回答 2

4

我并不完全清楚您要解决什么问题。你总是必须“硬编码”一些东西,因为你需要定义谁可以访问什么。如果您决定它应该在控制系统中,那么它也不会超出控制系统,这实际上取决于您的实施。

对于您要执行的操作,我通常会定义一个“所有者”角色,然后定义一个访问权限,例如:

"owner" can "delete" "resource"

因此,必须有一些程序化部分,您可以在其中找出用户是否确实是所有者。通常,这可以通过将每个资源与例如“ownerId”属性相关联来完成。如果 userId == ownerId,则当前用户的角色是“所有者”。

于 2012-10-28T15:15:04.317 回答
2

这需要 RBAC 层对“业务规则”的支持。当这种情况可用时,它会为您提供所需的动态决策。基本上,biz 规则是每次检查权限时运行的一段代码。此代码是静态的,但希望将参数传递给它。这是一个示例(显示 PHP):

// This code expect two given parameters: $params['owner_id'] and $params['user_id']
if ($params['owner_id'] == $params['user_id']) {
  return true;
}
return false;
// This code assumes that returning true means 'permission granted' and returning 
// false means permission not granted

你没有说明你的底层技术。这可以帮助您获得更准确的答案。

于 2012-10-28T15:48:40.567 回答