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