Django基于角色的权限

Django基于角色的权限,django,authorization,access-control,rbac,abac,xacml,alfa,Django,Authorization,Access Control,Rbac,Abac,Xacml,Alfa,我正在django中开发一个巨大的应用程序,我需要一个权限系统,我假设django中的本地用户/组权限是不够的。以下是我的需要: 该应用程序将通过多个部门提供。每个部门的行动几乎相同。但是,也许用户将被允许在a部门和B部门添加新的团队成员,他只允许查看团队列表,而在其他部门,他根本没有访问权限。 我认为使用RBAC系统是最合适的。角色还必须是可继承的,存储在模型中,并可通过接口进行管理。有什么好主意或建议吗?关于这个问题,有两个部分: 首先,角色管理。角色可以通过组成员身份实现,即部门A_add

我正在django中开发一个巨大的应用程序,我需要一个权限系统,我假设django中的本地用户/组权限是不够的。以下是我的需要:

该应用程序将通过多个部门提供。每个部门的行动几乎相同。但是,也许用户将被允许在a部门和B部门添加新的团队成员,他只允许查看团队列表,而在其他部门,他根本没有访问权限。
我认为使用RBAC系统是最合适的。角色还必须是可继承的,存储在模型中,并可通过接口进行管理。有什么好主意或建议吗?关于这个问题,有两个部分:

首先,角色管理。角色可以通过组成员身份实现,即部门A_addMember和部门B_listMembers。这些组将附加相应的权限,例如“成员添加”和“成员查看”。此上下文中的部门可能包含更多需要单独权限的资源。Django允许使用自定义扩展对象

第二,继承。我是否理解您想让单个组成为其他组的成员?那么这就是Django需要您自己实现的东西


但是,如果您正在寻找一种更为复杂的身份验证解决方案,那么通过(例如)与第三方服务集成可能是值得的。除了一个名字,肯定还有其他解决方案。

这个问题有两个组成部分:

首先,角色管理。角色可以通过组成员身份实现,即部门A_addMember和部门B_listMembers。这些组将附加相应的权限,例如“成员添加”和“成员查看”。此上下文中的部门可能包含更多需要单独权限的资源。Django允许使用自定义扩展对象

第二,继承。我是否理解您想让单个组成为其他组的成员?那么这就是Django需要您自己实现的东西


但是,如果您正在寻找一种更为复杂的身份验证解决方案,那么通过(例如)与第三方服务集成可能是值得的。当然还有更多的/其他的解决方案,只需加上一个名称。

您正在寻找的是基于属性的访问控制。这是RBAC作为一种访问控制模型的演变。在RBAC中,可以根据角色、组和潜在权限定义访问控制。然后,您必须在应用程序中编写代码来理解角色和组。这称为以身份为中心的访问控制

在ABAC中,有两个新元素:

  • 属性是组和角色的概括。属性是一个键值对,可以描述任何人和任何事情。例如,
    部门
    成员
    行动
    都是属性
  • 策略将属性绑定在一起,以确定是否应授予访问权限。策略是一种人性化的授权表达方式。与在应用程序中编写自定义代码不同,您编写的策略可以在应用程序、数据库和API之间集中管理和重用
有两种ABAC语言,如和。使用ALFA,我可以编写以下策略:

  • 将允许用户在部门A中添加新的团队成员
  • 在B部门,他只能查看团队列表
  • 在其他部门,他根本无法进入
  • 角色还必须是可继承的,存储在模型中,并可通过接口进行管理
ABAC的一个关键好处是,您可以根据自己的喜好开发任意多个策略,对它们进行审核、共享,并且根本不必触碰应用程序代码,因为您最终将授权外部化

有几个引擎/项目实施ABAC,例如:

  • AuthZForce(用于XACML授权的Java库)
  • (商业产品-免责声明:我在那里工作)
  • 美国电话电报公司XACML

您需要的是基于属性的访问控制。这是RBAC作为一种访问控制模型的演变。在RBAC中,可以根据角色、组和潜在权限定义访问控制。然后,您必须在应用程序中编写代码来理解角色和组。这称为以身份为中心的访问控制

在ABAC中,有两个新元素:

  • 属性是组和角色的概括。属性是一个键值对,可以描述任何人和任何事情。例如,
    部门
    成员
    行动
    都是属性
  • 策略将属性绑定在一起,以确定是否应授予访问权限。策略是一种人性化的授权表达方式。与在应用程序中编写自定义代码不同,您编写的策略可以在应用程序、数据库和API之间集中管理和重用
有两种ABAC语言,如和。使用ALFA,我可以编写以下策略:

  • 将允许用户在部门A中添加新的团队成员
  • 在B部门,他只能查看团队列表
  • 在其他部门,他根本无法进入
  • 角色还必须是可继承的,存储在模型中,并可通过接口进行管理
ABAC的一个关键好处是,您可以根据自己的喜好开发任意多个策略,对它们进行审核、共享,并且根本不必触碰应用程序代码,因为您最终将授权外部化

有几个引擎/项目实施ABAC,例如:

  • 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
            }
        }
    }