我在django中开发了一个庞大的应用程序,我需要一个权限系统,我认为django中的本机用户/组权限是不够的。在这里我的需求:
申请将是……
您正在寻找的是什么 ABAC 又称基于属性的访问控制。这是RBAC作为访问控制模型的演变。在RBAC中,您可以根据角色,组和可能的权限定义访问控制。然后,您必须在应用程序中编写代码以了解角色和组。这就是所谓的 以身份为中心的访问控制 。
在ABAC中,有2个新元素:
department
member
action
有几种ABAC语言,如 XACML 和 阿尔法 。使用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的引擎/项目,例如:
这个问题有两个组成部分:
一,角色管理。角色可以通过组成员身份来实现,即departmentA_addMember& departmentB_listMembers。这些组将附加相应的权限,例如“会员|添加”和“会员|查看”。此上下文中的部门可能包含更多资源,需要单独的权限。 Django允许使用自定义扩展对象 权限 。
二,继承。我是否理解您希望个别群组成为其他群组的成员?然后这就是Django要求你自己实现的东西。
但是,如果您正在寻找一种更复杂的身份验证解决方案,那么通过以下方式集成第三方服务可能是值得的。 Django的allauth 。肯定有更多/其他解决方案,只需要一个名字。