Django基于角色的权限
我正在django中开发一个巨大的应用程序,我需要一个权限系统,我假设django中的本地用户/组权限是不够的。以下是我的需要: 该应用程序将通过多个部门提供。每个部门的行动几乎相同。但是,也许用户将被允许在a部门和B部门添加新的团队成员,他只允许查看团队列表,而在其他部门,他根本没有访问权限。Django基于角色的权限,django,authorization,access-control,rbac,abac,xacml,alfa,Django,Authorization,Access Control,Rbac,Abac,Xacml,Alfa,我正在django中开发一个巨大的应用程序,我需要一个权限系统,我假设django中的本地用户/组权限是不够的。以下是我的需要: 该应用程序将通过多个部门提供。每个部门的行动几乎相同。但是,也许用户将被允许在a部门和B部门添加新的团队成员,他只允许查看团队列表,而在其他部门,他根本没有访问权限。 我认为使用RBAC系统是最合适的。角色还必须是可继承的,存储在模型中,并可通过接口进行管理。有什么好主意或建议吗?关于这个问题,有两个部分: 首先,角色管理。角色可以通过组成员身份实现,即部门A_add
我认为使用RBAC系统是最合适的。角色还必须是可继承的,存储在模型中,并可通过接口进行管理。有什么好主意或建议吗?关于这个问题,有两个部分: 首先,角色管理。角色可以通过组成员身份实现,即部门A_addMember和部门B_listMembers。这些组将附加相应的权限,例如“成员添加”和“成员查看”。此上下文中的部门可能包含更多需要单独权限的资源。Django允许使用自定义扩展对象 第二,继承。我是否理解您想让单个组成为其他组的成员?那么这就是Django需要您自己实现的东西
但是,如果您正在寻找一种更为复杂的身份验证解决方案,那么通过(例如)与第三方服务集成可能是值得的。除了一个名字,肯定还有其他解决方案。这个问题有两个组成部分: 首先,角色管理。角色可以通过组成员身份实现,即部门A_addMember和部门B_listMembers。这些组将附加相应的权限,例如“成员添加”和“成员查看”。此上下文中的部门可能包含更多需要单独权限的资源。Django允许使用自定义扩展对象 第二,继承。我是否理解您想让单个组成为其他组的成员?那么这就是Django需要您自己实现的东西
但是,如果您正在寻找一种更为复杂的身份验证解决方案,那么通过(例如)与第三方服务集成可能是值得的。当然还有更多的/其他的解决方案,只需加上一个名称。您正在寻找的是基于属性的访问控制。这是RBAC作为一种访问控制模型的演变。在RBAC中,可以根据角色、组和潜在权限定义访问控制。然后,您必须在应用程序中编写代码来理解角色和组。这称为以身份为中心的访问控制 在ABAC中,有两个新元素:
- 属性是组和角色的概括。属性是一个键值对,可以描述任何人和任何事情。例如,
、部门
和成员
都是属性行动
- 策略将属性绑定在一起,以确定是否应授予访问权限。策略是一种人性化的授权表达方式。与在应用程序中编写自定义代码不同,您编写的策略可以在应用程序、数据库和API之间集中管理和重用
- 将允许用户在部门A中添加新的团队成员
- 在B部门,他只能查看团队列表
- 在其他部门,他根本无法进入李>
- 角色还必须是可继承的,存储在模型中,并可通过接口进行管理李>
- AuthZForce(用于XACML授权的Java库)
- (商业产品-免责声明:我在那里工作)
- 美国电话电报公司XACML
- 属性是组和角色的概括。属性是一个键值对,可以描述任何人和任何事情。例如,
、部门
和成员
都是属性行动
- 策略将属性绑定在一起,以确定是否应授予访问权限。策略是一种人性化的授权表达方式。与在应用程序中编写自定义代码不同,您编写的策略可以在应用程序、数据库和API之间集中管理和重用
- 将允许用户在部门A中添加新的团队成员
- 在B部门,他只能查看团队列表
- 在其他部门,他根本无法进入李>
- 角色还必须是可继承的,存储在模型中,并可通过接口进行管理李>
- AuthZForce(用于XACML授权的Java库)
- (商业产品-免责声明:我在那里工作)
- 美国电话电报公司
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 } } }