权限相关操作
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',