[英]Django role based permissions
我正在django中开发一个大型应用程序,我需要一个权限系统,并且我认为django中的本机用户/组权限还不够。 这是我的需求:
该应用程序可以通过多个部门使用。 在每个部门中,几乎都有相同的动作。 但是也许允许用户在部门A中添加新的团队成员,而在部门B中仅允许他查看团队列表,而在其他部门中他根本没有访问权限。 尽管使用RBAC系统是最合适的。 角色还必须是可继承的,并且可以通过接口管理在模型中。 有什么好的想法或建议吗? 问候
这个问题有两个部分:
一是角色管理。 可以通过组成员身份来完成角色,即DepartmentA_addMember和departmentB_listMembers。 这些组将具有相应的权限,例如“成员|添加”和“成员|视图”。 在这种情况下,部门可能包含更多资源,这些资源需要单独的权限。 Django允许使用自定义Permissions扩展对象。
第二,继承。 我是否知道您想让单个组成为其他组的成员? 这就是Django要求您实现的东西。
但是,如果您正在寻找一个真正更复杂的身份验证解决方案,则可能值得通过例如django-allauth与第三方服务集成。 当然,还有更多/其他解决方案,只是一个名字而已。
您在寻找什么叫做abac aka基于属性的访问控制。 它是RBAC作为访问控制模型的演变。 在RBAC中,您可以根据角色,组和潜在的权限来定义访问控制。 然后,您必须在应用程序内编写代码以了解角色和组。 这称为以身份为中心的访问控制 。
在ABAC中,有2个新元素:
department
, member
和action
都是属性。 有几种ABAC语言,例如xacml和alfa 。 使用ALFA,我可以编写以下策略:
- 允许用户在部门A中添加新的团队成员
- 在部门B中,他仅被允许查看团队清单
- 在其他部门,他根本没有权限。
- 角色还必须是可继承的,并且可以通过接口管理在模型中。
policyset appAccess{
apply firstApplicable
policy members{
target clause object = "member"
apply firstApplicable
/**
* A user can add a member to a department if they are a manager and if they are assigned to that department.
*/
rule addMember{
target clause role == "manager" and action == "add"
permit
condition user.department == target.department
}
}
}
ABAC的主要优势之一是,您可以开发任意数量的策略,对其进行审核,共享,而不必完全接触应用程序代码,因为最终将授权外部化了。
有几个实现ABAC的引擎/项目,例如:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.