python django rbacweb服务器python

权限相关操作

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',

上一篇 下一篇

猜你喜欢

热点阅读