day8-权限关系

一、权限表之间关系

创建用户表
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-权限关系)