我已经阅读了一些关于Role-based access control的文章,但还不清楚处理这种情况:如何实现“用户可以删除自己的帖子”?
对于普通角色和权限,当用户执行某些操作时,我只需检查用户拥有的角色和权限,并确定用户是否可以执行此操作。
但是对于“用户可以删除自己的帖子”,我必须检查这些帖子是否属于他。所以我必须硬编码,然后它就不受控制系统的控制。
我是否错过了什么以及如何正确地做到了?
答案 0 :(得分:4)
我并不完全清楚你要解决的问题是什么。你总是需要“硬编码”某些东西,因为你需要定义谁可以访问什么。如果您认为它应该存在,那么某些东西也不会超出控制系统,这实际上取决于您的实施。
对于您要做的事情,我通常会定义一个“所有者”角色,然后定义一个访问权限,例如:
"owner" can "delete" "resource"
因此,必须有一些编程部分,您可以在其中找出用户是否确实是所有者。通常,这可以通过将每个资源与例如“ownerId”属性相关联来完成。如果userId == ownerId,则当前用户的角色为“owner”。
答案 1 :(得分: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
您没有陈述您的基础技术。这可以帮助您获得更准确的答案。