美文网首页
day8-权限关系

day8-权限关系

作者: 旧时初_2e8d | 来源:发表于2018-09-19 11:03 被阅读0次

    一、权限表之间关系

    创建用户表
    Auth_user
    创建用户组
    Auth_group
    多对多关系
    c = models.ManyTOManyFiled(Auth_group)
    通过用户查询用户组
    Auth_user.Auth_group
    通过用户组查询用户
    Auth_group.auth_user_set

    创建用户
    Auth_user
    创建权限
    Auth_permission
    多对多关系
    e = models.ManyTOManyFiled(Auth_permission)
    通过用户查询权限
    Auth_user.Auth_permission
    通过用户组查询用户
    Auth_permission.auth_user_set

    创建用户组
    Auth_group
    创建权限
    Auth_permission
    多对多关系
    d = models.ManyTOManyFiled(Auth_permission)
    通过用户组查询权限
    Auth_group.Auth_permission
    通过用户组查询用户
    Auth_permission.auth_group_set

    二、应用

    User模型自定义

    class MyUser(AbstractUser):
        """
        自定义django自带的User模型
        """
    #给User表增加属性
        is_delete = models.BooleanField(default=0,verbose_name='是否删除')
    
    
        class Meta:
    #给权限表添加权限
            #'权限名','描述'
            permissions =(
                ('change_myuser_username','修改用户名'),
                ('change_myuser_password','修改密码')
            )
    

    此时进行数据库迁移是需要在setting中进行设置
    指定用户模型为我们自己创建的

    AUTH_USER_MODEL = 'app.MyUser'

    1.给指定用户增加指定权限

    首先获取指定用户对象和指定权限对象

    user =MyUser.objects.filter(username='admin').first()
    per=Permission.objects.filter(codename='change_myuser_username').first()

    • 添加权限

    user.user_permissions.add(per)

    • 删除权限

    user.user_permissions.remove(per)

    • 清空权限

    user.user_permissions.clear(per)

    2.给指定组添加指定的权限

    首先获取指定组和指定权限对象

    group = Group.objects.filter(name='审核组').first()
    per_list = ['change_myuser','delete_myuser',
                            'change_myuser_username',
                            'change_myuser_password']
                # 获取编辑的四个权限
    perms = Permission.objects.filter(codename__in=per_list)
    
    • 添加组和权限之间的关系
      遍历perms给组添加权限

    group.permissions.add(per)

    • 删除组和权限之间的关系
    3.给指定用户分配指定组

    首先获取指定用户和指定组的对象

    user = MyUser.objects.filter(username='admin').first()
    group =Group.objects.filter(name='审核组').first()

    • 给admin用户分配组

    user.groups.add(group)

    • 删除用户和组之间的关系

    user.groups.remove(group)

    4.查询指定用户的权限

    获取指定用户对象

    user = MyUser.objects.filter(username='admin').first()

    方法一
    • 1.用户和权限的关联表中查询

    per = user.user_permissions.all().values('codename')

    • 2.通过用户查询组,通过组查询权限

    per2 = user.groups.first().permissions.all().values('codename')

    方法二
    • 通过用户获取组权限

    user.get_group_permissions()

    • 通过用户查询所有的权限

    user.get_all_permissions()

    5.查看指定权限对应的用户
    • 通过组查询用户

    per.group_set.first().user_set.first()

    补充

    添加装饰器,判断当有change_myuser权限是才能进入

    @permission_required('app.change_myuser')

    通过中间件设置用户
    在setting中加入

    'utils.middleware.UserAuthMiddleware'

    from django.utils.deprecation import MiddlewareMixin
    
    from app.models import MyUser
    
    
    class UserAuthMiddleware(MiddlewareMixin):
    
        def process_request(self,request):
    
            user = MyUser.objects.get(username='admin')
            request.user = user
    
            return None
    
    

    相关文章

      网友评论

          本文标题:day8-权限关系

          本文链接:https://www.haomeiwen.com/subject/tcnbnftx.html