当前位置:  开发笔记 > 编程语言 > 正文

如何在Django上由管理员和客户分隔用户(模型)

如何解决《如何在Django上由管理员和客户分隔用户(模型)》经验,为你挑选了1个好方法。

我想将我的Django应用程序的用户分为两类:
- Admin(使用Django admin的用户) - 继承自AbstractUser
- User(客户用户) - 继承自AbstractBaseUser

我想这两种用户分开,因为所有领域AbstractUser(is_staff,is_superuser,groups,permissions)是无用的,我的客户的用户和权限和组,我只是想实现不同的东西.那就是为什么,我想用AbstractBaseUser.

但是对于django管理员用户来说AbstractUser,这是完美的,尤其是权限功能.

class Admin(AbstractUser):
    pass

class Customer(AbstractBaseUser):
    pass

但现在,有没有办法精确定义Admin用于django管理员的用户模型?并将该Customer模型用于我的其他应用程序.

我是否必须从头开始实施:

class MyUser(AbstractBaseUser):
    username = models.CharField(max_length=30, unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()
    is_active = models.BooleanField(default=False)

class Admin(MyUser, PermissionsMixin):
    is_staff = models.BooleanField(default=True)


class Customer(MyUser):
    # specific fields
    pass

有了这个实施,如果我设置AUTH_USER_MODELUser,权限将无法工作,因为User没有permissions,is_superuseris_staff领域.

而如果将其设置为Admin,我将无法进行身份验证Customersdjango.contrib.auth.

那么伙计们你有解决这个问题的方法吗?



1> Alex Morozov..:

Django为您提供的方式似乎更灵活,适应未来.

    您有一个User可以覆盖的内置模型.无论如何,该模型具有权限,组等.

    如果您需要为不同类型的用户设置不同的字段集,则可以创建OneToOne配置文件模型.

    管理员(实际上是员工用户)和普通客户之间的分离点是一个User.is_staff属性.

这样你获得了很多很酷的东西(与两个完全不同的用户模型相比):

一切都开箱即用:contrib.authcontrib.admin模块.

易于定制的分离点:只需覆盖admin_site.has_permission()即可.

您有能力(但没有义务)创建客户和管理员用户.

您可以将组和权限(与管理员的权限不同)分配给您的客户.即使你现在也不需要它,谁知道呢.

至于缺点.到目前为止您唯一指出的一个问题:您的客户将拥有(暂时不使用)权限.好吧,因为它们(以及组)只是单独的表,您的客户数据将没有存储开销的性能.

也就是说,与收益相比,开销是可以忽略的.我强烈建议保留Django的默认User模型并在必要时扩展它.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有