权限相关操作
2018-10-03 本文已影响35人
GHope
利用Django自带的相关方法对权限进行基本的操作。
重写User模型
在创建的应用中的模块文件重新定义User模型
from django.db import models
from django.contrib.auth.models import User, Group, Permission, AbstractUser
class MyUser(AbstractUser):
"""
自定义Django自带的User模型
"""
is_delete = models.BooleanField(default=0, verbose_name='是否删除')
class Meta:
# ('描述','权限名')
permissions = (
('change_myuser_username','修改用户名'),
('change_myuser_password','修改密码'),
)
在配置文件中进行相关配置
# 自定义用户模型为我们自己创建的MyUser模型
AUTH_USER_MODEL = 'users.MyUser
此时进行数据迁移
数据表因为在此之前已经通过创建用户进行了一些权限操作,所以表中存在数据。刚进行完数据迁移的数据表中应该只有字段信息,而无数据信息。
自定义数据表内容视图函数相关操作
from django.contrib.auth.models import Permission, Group
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth.decorators import permission_required
from users.models import MyUser
def add_user_permission(request):
if request.method == 'GET':
# 给admin添加修改同户名的权限
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()
return HttpResponse('添加用户权限成功')
def create_user(request):
if request.method == 'GET':
MyUser.objects.create_user(username='admin',
password='admin')
return HttpResponse('创建用户成功')
def add_group_permission(request):
if request.method == 'GET':
group = Group.objects.filter(name='审核组').first()
if group:
per_list = ['change_myuser', 'delete_myuser',
'change_myuser_username',
'change_myuser_password']
perms = Permission.objects.filter(codename__in=per_list)
for per in perms:
# 添加组和权限之间的关系
group.permissions.add(per)
# 删除组和权限之间的关系
# group.permissions.remove(per)
return HttpResponse('创建组和权限之间的关系')
else:
Group.objects.create(name='审核组')
return HttpResponse('请先创建审核组')
def add_user_group(request):
if request.method == 'GET':
# 给用户分配组
user = MyUser.objects.filter(username='admin').first()
group = Group.objects.filter(name='审核组').first()
# 给admin用户分组
user.groups.add(group)
return HttpResponse('分配成功')
def user_permission(request):
if request.method == 'GET':
user = MyUser.objects.filter(username='admin').first()
# 查询user的权限
# 1、用户权限
p1 = user.user_permissions.all().values('codename')
# 2、所属组权限
p2 = user.groups.first().permissions.all().values('codename')
# 通过用户获取组权限
permissions_group = user.get_group_permissions()
# 通过用户获取所有权限
permissions = user.get_all_permissions()
return HttpResponse(permissions)
@permission_required('users.change_myuser_username')
def index(request):
if request.method == 'GET':
# change_myuser_username
# return HttpResponse('我需要拥有用户名的权限才能访问')
return render(request,'index.html')
装饰器
from django.utils.deprecation import MiddlewareMixin
from users.models import MyUser
class UserAuthMiddleware(MiddlewareMixin):
def process_request(self,request):
user = MyUser.objects.get(username='admin')
request.user = user
return None
settings对中间键的配置
'utils.middleware.UserAuthMiddleware',