zoukankan      html  css  js  c++  java
  • django中判断当前user具有是否有对模块的增删改查权限

    首先简单了解一下user的一些属性

    User对象

    User对象是认证系统的核心。用户对象通常用来代表网站的用户,并支持例如访问控制、注册用户、关联创建者和内容等。在Django认证框架中只有一个用户类,例如超级用户('superusers’)或('staff')用户只不过是相同用户对象设置了不同属性而已。

    缺省字段Fields

    username

    用户名,必需字段。30个字符或更少,可以包含 _, @, +, . 和 - 字符。

    first_name
    可选。 30 characters or fewer.

    last_name
    可选。 30 characters or fewer.

    email
    邮箱,可选。 Email address.

    password
    密码,必需。Django不是以明文存储密码的,而是存储哈希值。

    groups
    用户组。Many-to-many relationship to Group

    user_permissions
    用户权限。Many-to-many relationship to Permission

    1
    2
    3
    4
    5
    6
    7
    8
    9
    groups = models.ManyToManyField(Group, verbose_name=_('groups'),
        blank=True, help_text=_('The groups this user belongs to. A user will '
                                'get all permissions granted to each of '
                                'their groups.'),
        related_name="user_set", related_query_name="user")
    user_permissions = models.ManyToManyField(Permission,
        verbose_name=_('user permissions'), blank=True,
        help_text=_('Specific permissions for this user.'),
        related_name="user_set", related_query_name="user")

    is_staff
    Boolean。决定用户是否可以访问admin管理界面。默认False。

    is_active
    Boolean。 用户是否活跃,默认True。一般不删除用户,而是将用户的is_active设为False。

    is_superuser
    Boolean。默认False。当设为True时,用户获得全部权限。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def has_perm(self, perm, obj=None):
        """
        Returns True if the user has the specified permission. This method
        queries all available auth backends, but returns immediately if any
        backend returns True. Thus, a user who has permission from a single
        auth backend is assumed to have permission in general. If an object is
        provided, permissions for this specific object are checked.
        """
     
        # Active superusers have all permissions.
        if self.is_active and self.is_superuser:
            return True
     
        # Otherwise we need to check the backends.
        return _user_has_perm(self, perm, obj)

    last_login

    上一次的登录时间,为datetime对象,默认为当时的时间。

    1
    user.last_login = timezone.now()

    date_joined
    用户创建的时间

    方法Methods

    is_anonymous()

    是否是匿名用户。

    is_authenticated()
    用户是否通过验证,登陆。

    get_full_name()
    返回first_name plus the last_name, with a space in between.

    get_short_name()
    返回first_name.

    set_password(raw_password)
    设置密码。

    check_password(raw_password)
    验证密码。

    get_group_permissions(obj=None)
    返回用户组权限的集合。

    get_all_permissions(obj=None)
    返回用户所有的权限集合。

    has_perm(perm, obj=None)
    用户是否具有某个权限。perm的格式是 "<app label>.<permission codename>". 如: user.has_perm('user.addentry') 返回的是True或者False

    这里的codename 我也不知道从django哪里去找,只能打开mysql里的表,查询出codename, 后面知道再补上

    has_perms(perm_list, obj=None)
    用户是否具有权限列表中的每个权限。

    这里查过源码,实在的方式其实是遍历了perm_list然后每次使用 self.has_perm来进行判断,如果有一个为False那么全部为False

    所以perm_list只需要将需要验证的权限组织成一个列表就行,如 perm_list = [ "<app label>.<permission codename>",  "<app label>.<permission codename>"]

  • 相关阅读:
    [操作系统]处理机调度的概念和层次
    [操作系统]线程的概念和多线程模型
    [操作系统]进程通信
    [操作系统]进程的控制
    [操作系统]进程的状态与转换
    [操作系统]进程的定义
    [操作系统]操作系统中断机制
    [操作系统]操作系统的运行机制和体系结构
    [操作系统] 操作系统的特征-并发性/共享性/虚拟性/异步性
    [PHP] PHP数组的哈希表实现
  • 原文地址:https://www.cnblogs.com/a-way-blog/p/10056703.html
Copyright © 2011-2022 走看看