正确的方法为用户Django分配唯一的组

时间:2017-06-25 07:07:26

标签: django architecture

我在下一篇文章中读到了它,试图找到有关我怀疑的信息:

https://baxeico.wordpress.com/2014/09/10/group-combo-box-django-user-profile-form/

https://micropyramid.com/blog/django-permissions-and-groups/

https://www.webforefront.com/django/setupdjangousers.html

我的系统中的前提:用户只能在一个独特的组中。

我的问题是关于我的前提,从我的应用程序向用户分配唯一群组的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

通过PermissionsMixin将组添加到AbstractUser,并且是一个ManyToManyField。有两种方法可以做到这一点:

  1. 您听取m2m_changed用户模型,然后实施一些逻辑来拒绝多个群组。
  2. ForeignKey在新Group模型上ProjectUserdjango.contrib.auth.models,并重新实现PermissionsMixin和AbstractUser。
  3. 第一种方法有点棘手,我不推荐它。第二个缺点是你几乎可以复制80%的PermissionsMixin和所有东西,但它是AbstractUser的继承,但必须与新版本保持同步。遗憾的是,Django以这种方式实施它是一种耻辱。

    但第二个优点是,用户和组之间的关系现在就像您在需求中定义的那样。所以对我来说,保持正确的数据模型而不是黑客攻击它,胜利。

    看一下app/models.py我提到的课程。

    澄清第二种方法:

    from django.contrib.auth.models import AbstractBaseUser, Group class ProjectUser(AbstractBaseUser): group = models.ForeignKey(Group) # fields and methods from AbstractUser go here # fields and methods from PermissionsMixin go here

    var customer: Customer = Customer.sharedInstance
    
    final class Customer {
    
        static let sharedInstance = Customer()
    
        var name: String!
        var address: String!
        var zipcode: String!
        var id: String!
    
        private init() {}
    
    }
    

    (对不起,这是两个课程而不是你需要复制的课程。)