auth_group权限组管理

1、权限组的表分析

auth_group  ---  是存储权限分组

auth_permission --- 存放用户可以使用那个表

auth_group_permission --- 连接权限分组和能使用权限的表

auth_users_group --- 连接用户信息表和权限分组表

后台的功能实现

# 在apps/admin/views.py中创建如下类:

class GroupsManageView(View):
    """
    /admin/groups/    渲染页面和发送前端展示数据
    """
    def get(self,request):
        groups = Group.objects.values(‘id‘,‘name‘).annotate(num_users=Count(‘user‘)).            order_by(‘-num_users‘,‘id‘)
        return render(request,‘admin/user/groups_manage.html‘,locals())

class GroupsAddView(View):
    """
    /admin/groups/add/  增加管理组
    """
    def get(self,request):
        permissions = Permission.objects.only(‘id‘).all()
        return render(request,‘admin/user/groups_add.html‘,locals())

    def post(self,request):
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode(‘utf8‘))

        # 取出组名,进行判断
        group_name = dict_data.get(‘name‘, ‘‘).strip()
        if not group_name:
            return to_json_data(errno=Code.PARAMERR, errmsg=‘组名为空‘)

        one_group, is_created = Group.objects.get_or_create(name=group_name)
        if not is_created:
            return to_json_data(errno=Code.DATAEXIST, errmsg=‘组名已存在‘)

        # 取出权限
        group_permissions = dict_data.get(‘group_permissions‘)
        if not group_permissions:
            return to_json_data(errno=Code.PARAMERR, errmsg=‘权限参数为空‘)

        try:
            permissions_set = set(int(i) for i in group_permissions)
        except Exception as e:
            logger.info(‘传的权限参数异常:\n{}‘.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg=‘权限参数异常‘)

        all_permissions_set = set(i.id for i in Permission.objects.only(‘id‘))
        if not permissions_set.issubset(all_permissions_set):
            return to_json_data(errno=Code.PARAMERR, errmsg=‘有不存在的权限参数‘)

        # 设置权限
        for perm_id in permissions_set:
            p = Permission.objects.get(id=perm_id)
            one_group.permissions.add(p)

        one_group.save()
        return to_json_data(errmsg=‘组创建成功!‘)

class GroupsEditView(View):
    """
    /admin/groups/<int:group_id>/  更新管理的权限
    """
    def get(self,request,group_id):
        group = Group.objects.filter(id=group_id).first()
        if group:
            permissions = Permission.objects.only(‘id‘).all()
            return render(request,‘admin/user/groups_add.html‘,locals())
        raise Http404(‘需要更新的组不存在!‘)

    def delete(self, request, group_id):
        group = Group.objects.filter(id=group_id).first()
        if group:
            group.permissions.clear()   # 清空权限
            group.delete()
            return to_json_data(errmsg="用户组删除成功")
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg="需要删除的用户组不存在")

    def put(self,request,group_id):
        group = Group.objects.filter(id=group_id).first()
        if not group:
            return to_json_data(errno=Code.NODATA, errmsg=‘需要更新的用户组不存在‘)

        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
        # 将json转化为dict
        dict_data = json.loads(json_data.decode(‘utf8‘))

        # 取出组名,进行判断
        group_name = dict_data.get(‘name‘, ‘‘).strip()
        if not group_name:
            return to_json_data(errno=Code.PARAMERR, errmsg=‘组名为空‘)

        if group_name != group.name and Group.objects.filter(name=group_name).exists():
                return to_json_data(errno=Code.DATAEXIST, errmsg=‘组名已存在‘)

        # 取出权限
        group_permissions = dict_data.get(‘group_permissions‘)
        if not group_permissions:
            return to_json_data(errno=Code.PARAMERR, errmsg=‘权限参数为空‘)

        try:
            permissions_set = set(int(i) for i in group_permissions)
        except Exception as e:
            logger.info(‘传的权限参数异常:\n{}‘.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg=‘权限参数异常‘)

        all_permissions_set = set(i.id for i in Permission.objects.only(‘id‘))
        if not permissions_set.issubset(all_permissions_set):
            return to_json_data(errno=Code.PARAMERR, errmsg=‘有不存在的权限参数‘)

        existed_permissions_set = set(i.id for i in group.permissions.all())
        if group_name == group.name and permissions_set == existed_permissions_set:
            return to_json_data(errno=Code.DATAEXIST, errmsg=‘用户组信息未修改‘)
        # 设置权限
        for perm_id in permissions_set:
            p = Permission.objects.get(id=perm_id)
            group.permissions.add(p)
        group.name = group_name
        group.save()
        return to_json_data(errmsg=‘组更新成功!‘)

class UsersManageView(View):
    """
    /admin/users/
    """
    def get(self,request):
        users = Users.objects.only(‘username‘, ‘is_staff‘, ‘is_superuser‘).filter(is_active=True)
        return render(request, ‘admin/user/users_manage.html‘, locals())

class UsersEditView(View):
    """
    /admin/users/<int:user_id>/
    """
    def get(self,request,user_id):
        user_instance = Users.objects.filter(id=user_id).first()
        if user_instance:
            groups = Group.objects.only(‘name‘).all()
            return render(request, ‘admin/user/users_edit.html‘, locals())
        else:
            raise Http404(‘需要更新的用户不存在!‘)

    def put(self,request,user_id):
        user_instance = Users.objects.filter(id=user_id).first()
        if not user_instance:
            return to_json_data(errno=Code.NODATA, errmsg=‘需要更新的用户不存在‘)

        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
        # 将json转化为dict
        dict_data = json.loads(json_data.decode(‘utf8‘))

        # 取出参数,进行判断
        try:
            groups = dict_data.get(‘groups‘)    # 取出用户组列表

            is_staff = int(dict_data.get(‘is_staff‘))
            is_superuser = int(dict_data.get(‘is_superuser‘))
            is_active = int(dict_data.get(‘is_active‘))
            params = (is_staff, is_superuser, is_active)
            if not all([p in (0, 1) for p in params]):
                return to_json_data(errno=Code.PARAMERR, errmsg=‘参数错误‘)
        except Exception as e:
            logger.info(‘从前端获取参数出现异常:\n{}‘.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg=‘参数错误‘)

        try:
            groups_set = set(int(i) for i in groups) if groups else set()
        except Exception as e:
            logger.info(‘传的用户组参数异常:\n{}‘.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg=‘用户组参数异常‘)

        all_groups_set = set(i.id for i in Group.objects.only(‘id‘))
        if not groups_set.issubset(all_groups_set):
            return to_json_data(errno=Code.PARAMERR, errmsg=‘有不存在的用户组参数‘)

        gs = Group.objects.filter(id__in=groups_set)
        # 先清除组
        user_instance.groups.clear()
        user_instance.groups.set(gs)

        user_instance.is_staff = bool(is_staff)
        user_instance.is_superuser = bool(is_superuser)
        user_instance.is_active = bool(is_active)
        user_instance.save()
        return to_json_data(errmsg=‘用户信息更新成功!‘)

    def delete(self, request, user_id):
        user_instance = Users.objects.filter(id=user_id).first()
        if user_instance:
            user_instance.groups.clear()    # 清除用户组
            user_instance.user_permissions.clear()  # 清除用户权限
            user_instance.is_active = False  # 设置为不激活状态
            user_instance.save()
            return to_json_data(errmsg="用户删除成功")
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg="需要删除的用户不存在")

原文地址:https://www.cnblogs.com/jun-1024/p/10962845.html

时间: 2024-10-14 02:13:02

auth_group权限组管理的相关文章

Linux系统用户、组和权限及管理

初学Linux,现将对用户.组和权限及管理做了一些整理,希望大家相互学习! 用户: 即在系统内将有限的资源在多个使用者之间进行分配的一个系统组件: 用户分类:Linux环境中用户一般分为管理员和普通用户: 管理员(root)是系统中的超级用户,被授予对系统资源所有的访问权限,可以对其它其它用户及组进行管理: 普通用户又分为系统用户和登录用户: 系统用户:仅用于运行服务程序,保障系统正常运行: 登录用户:系统资源的正常使用者,访问资源的权限需要Root管理指定: 用户ID(User ID UID)

Linux用户、组及权限的管理

用户类别: 超级管理员 普通用户 a)        系统用户 b)        登录用户 用户标识:UserID,UID 超级管理员root:0 普通用户:1-65635 a)        系统用户:1-499(CentOS6),    1-999(CentOS7) b)        登录用户:500-60000(CentOS6),    1000-60000(CentOS7) 提示: 1-99:由系统自行创建的系统账号 100-499:若用户有系统账号需求时,可以使用的账号UID 内核

用户、组权限和管理

在任何时候,用户操作计算机无非就是发起进程,因此,进程是用户操作计算机的代理,所以进程在运行时,一定是以发起它的用户的身份在运行,那么进程所能访问的权限就决定于发起它的用户的权限和要访问文件的权限. 权限: 文件: r: 可使用查看工具查看其内容: w:可编辑其内容:[若仅有w,且目录无w,则不能删除文件] x: 可将此文件向内核提请启动为进程: 目录: r: 可以使用ls命令列出其内部所有文件或子目录的相关信息: w: 在此目录内创建或删除文件: x: 可以cd进此目录,可以使用ls -l查看

用户管理_组管理_权限管理.ziw

2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage 组管理: groupadd, groupdel, groupmod, gpasswd 权限管理: chown, chgrp, chmod, umask /etc/passwd: 用户名:密码:UID:GID:注释:家目录:默认SHELL vi  /etc/passwd /etc/group: 组名

linux综合顺练(涉及管道,正则,重定向、用户及组管理、权限管理等相关知识点)

一.概述   本博文是对前边总结的知识点的一个综合利用,涉及的知识点比较广泛,涉及的大概有"bash特性之管道","bash特性之重定向","grep命令与正则表达式的利用","linux下用户与组管理","linux下权限管理"等.下面给出上边提到知识点之前的博客链接: bash的重定向和管道相关知识点:http://blog.51cto.com/9657273/2172717 文件基础管理类命令汇总:h

大数据学习之_01_Linux学习_02_组管理和权限管理+定时任务调度+linux磁盘分区、挂载+linux的网络配置+进程管理(重点)+软件包管理+大厂面试题+感悟分享+资料附录

10 组管理和权限管理10.1 Linux组的基本介绍10.2 文件/目录的所有者10.3 文件/目录的所在组10.4 权限的基本介绍10.5 rwx权限详解10.6 修改权限指令-chmod10.7 修改文件所有者-chown10.8 修改文件所在组-chgrp10.9 最佳实践-警察和土匪游戏11 定时任务调度11.1 crond任务调度12 linux磁盘分区.挂载12.1 分区的基本知识12.2 Linux分区12.3 挂载的经典案例12.4 查询系统整体磁盘使用情况12.5 查询指定目

Linux用户权限管理和组管理相关命令

目标 用户 和 权限 的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 01. 用户 和 权限 的基本概念 1.1 基本概念 用户 是 Linux 系统工作中重要的一环,用户管理包括 用户 与 组 管理 在 Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限 在 Linux 中,可以指定 每一个用户 针对 不同的文件或者目录 的 不同权限 对 文件/目录 的权限包括: 序号 权限 英文 缩写 数字代号 01

11-用户及组管理.txt

回顾: 文件管理命令,bash的基础特性,文件本管理命令 文件管理命令:cp ,mv,rm bash的基础特性,alias/unalias,glob (*,?,[],[^]),快捷键 IO重定向.管道, 标准输出重定向:> ,>> 标准错误重定向:2>,2>> &>,&>> COMMND >/path/to/somefile.out 2> &1 输入重定向:< 显式使用:tr 隐式使用:... 管道:COMMN

第2章 系统用户/组管理

2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. 每个组也有自己的名称.组唯一编号gid(group id).一般来说,gid和uid是可以不相同的,但绝大多数都会让它们保持一致,大致属于约定俗成类的概念吧. 组分为主组(primary group)和辅助组(secondary group)两种,用户一定会属于某个主组,也可以同时加入多个辅助组.