我读过的一些文章基于角色的访问控制 ,但还不够清楚,处理这种情况:如何实现“用户可以删除自己的帖子”?
对于普通的角色和权限,当用户做一些事情,我可以检查角色和权限,用户拥有,并确定用户是否能做到这一点。
但是,对于“用户可以删除自己的帖子”我要检查,如果职位属于他或没有。 所以我要硬编码的东西的话,那是出了控制系统的控制。
难道我错过了什么,以及如何正确地做到这一点?
我读过的一些文章基于角色的访问控制 ,但还不够清楚,处理这种情况:如何实现“用户可以删除自己的帖子”?
对于普通的角色和权限,当用户做一些事情,我可以检查角色和权限,用户拥有,并确定用户是否能做到这一点。
但是,对于“用户可以删除自己的帖子”我要检查,如果职位属于他或没有。 所以我要硬编码的东西的话,那是出了控制系统的控制。
难道我错过了什么,以及如何正确地做到这一点?
这并不完全清楚,我你想解决什么问题。 你总是要“硬编码”的东西,因为你需要定义谁可以访问什么。 自己是不是出了控制系统或者如果你决定应该在,它真的取决于你的实现。
对于你正在尝试做的,我一般会定义一个“老板”的角色,然后定义接入,如:
"owner" can "delete" "resource"
因此,必须有一些计划的一部分,你看看用户是否确实拥有者或没有。 通常情况下,这可以通过与每个资源相关联,例如做,一个“OWNERID”属性。 如果用户id == OWNERID,那么当前用户的角色是“老板”。
这需要在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
你没有说明你的底层技术。 这可以帮助你获得更多准确的答案。