170.分组-group、permission、user的操作

分组

1.Group.objects.create(group_name):创建分组。
2.group.permissions:某个分组上的权限。多对多关系。
(1)group.permissions.add():添加权限。
(2)group.permissions.remove():删除权限。
(3)group.permissions.clear():清除所有权限。
(4)user.get_group_permissions()获取用户所属组的权限。
3.user.groups.某个用户上的所有权限。多对多关系。
因为使用权限常用的相关操作,比如user.user_permissions.set(),user.user_permission.add(),或者是user.user.permissions.remove()等操作为每一个用户分别添加权限的话,就会比较麻烦。所以我们就可以根据各个职位权限的不同进行分组,并且为用户组进行添加权限。之后将用户添加到分组中就会拥有相应的组的权限了。如果我们还想为某些分组中的用户赋予一些组内其他用户不能有的权限时,就可以使用用户权限的相关操作分别为用户添加权限了。

1. 创建分组,为分组赋予权限,示例代码如下:

from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.models import Permission, ContentType, Group
from .models import Article

def operate_permission(request):
    # 创建一个组
    group = Group.objects.create(name='管理组')
    <!--获取Article模型对应的表-->
    content_type = ContentType.objects.get_for_model(Article)
    <!--获取article表的用户对应的权限-->
    permissions = Permission.objects.filter(content_type=content_type)
    for permission in permissions:
        print(permission)
    # group.permissions.set(permissions)
    <!--为用户组添加权限使用add()函数,需要注意的是,add()函数中必须传递一个个的权限,不能传递一个权限的列表-->
    group.permissions.add(*permissions)
    # group.save()
    return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
执行完成该操作之后,就可以在auth_group、auth_group_permissions表中看到我们添加的用户分组,并且为相应的分组添加的权限了。

2. 将user表中的第一个用户添加到分组中,示例代码如下:

def operate_permission(request):
    # 2. 将user表中的第一个用户添加到管理分组中
    user = User.objects.first()
    group = Group.objects.filter(name='管理组').first()
    # 将用户添加到分组中
    user.groups.add(group)
    # user.save()
    return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
执行完该操作之后,就可以在user_groups中找到添加的用户及分组了。

3. get_all_permissions()获取用户拥有的所有权限。示例代码如下:

def operate_permisssion(request):
    # 3.可以通过get_all_permissions()获取用户拥有的所有权限
    user = User.objects.first()
    permissions = user.get_all_permissions()
    for permission in permissions:
        print(permission)
    return HttpResponse('操作分组group: 创建分组,并且赋予权限!')
此时就可以在pycharm中的运行窗口,看到打印出的用户权限了。
login_logout.delete_article
login_logout.view_article
login_logout.change_article
login_logout.add_article
login_logout.black_article
如果你之前通过user.user_permissions.set()等操作已经为用户user赋予过权限的话,在user_permissions表中会有相应的对应关系。但是,需要注意的是,我们此时打印出的并不是通过具体的用户权限的操作为user添加的权限,而是通过查找我们的user属于哪个分组,分组又有什么样的权限,那么该user就有什么样的权限。可以将该用户在user_permissions表中对应的权限相关关系删除,之后再次运行项目,同样可以打印出user拥有的权限,此时,就可以去确定该user的权限来自分组对应的权限。

4. 可以通过has_perm()判断用户是否有该权限,示例代码如下:

def operate_permission(request):
    # 4.通过has_perm()判断用户
    user = User.objects.first()
    if user.has_perm('login_logout.add_article'):
        print("您拥有该权限")
    else:
        print("不好意思,您没有权限")
    return HttpResponse('操作分组group: 创建分组,并且赋予权限!')

5. 同样判断用户是否登录还可以使用permissions_required装饰器判断,示例代码如下:

@permission_required(['login_logout.view_user','login_logout.add_user'], login_url= '/login_logout/', raise_exception=True)
<!--可以传递一个权限的列表进行判断-->

原文地址:https://www.cnblogs.com/guyan-2020/p/12356184.html

时间: 2024-11-05 22:05:38

170.分组-group、permission、user的操作的相关文章

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数

第17课-数据库开发及ado.net 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all;  Select 列 into 新表;字符串函数;日期函数 SQL聚合函数 MAX(最大值).MIN(最小值).AVG(平均值).SUM(和).COUNT(数量:记录的条数) 聚合函数对null不计算.如果一行数据都是null,count(*)包含对空值行.重复行的统计. --聚合函数演示 selec

sql分别用日期、月、年 分组 group by 分组,datepart函数

标签: datepart函数sql分别用日期月年 分组group by 分组 2013-12-26 15:31 20764人阅读 评论(1) 收藏 举报 分类: SQL Server(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. [sql] view plain copy --以2013-12-10 12:56:55为例 --convert(nvarchar(10),CreateDate,120) => 2013-12-10 --DATEPART(month,CreateDate

Android-通讯录:向分组Group添加联系人

long groupId = Constant.createGroupId; ContentValues values = new ContentValues(); for(int i=0,len=Constant.contactList.size();i<len;i++) { values.clear(); values.put(Data.RAW_CONTACT_ID, queryForRawContactId(getContentResolver(), Constant.contactLis

django分组group、user、permission

1.创建app01/models.py下User模型 from django.db import models from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin from django.contrib.auth import get_user_model class UserManager(BaseUserManager): def _create_user(sel

mysql - 分组group by、having

1. 分组:group by语句 group by必须跟在where子句里的条件之后,在order by之前(如果有的话),如下: select column1, column2 from table1, table2 where conditions group by column1, column2 order by column1, column2 1)被选中的字段(查询中select了的字段,如column1,column2)才能而且必须要出现在group by子句中,除了汇总函数:如果

高级分组group by 、 group by cube、 group by rollup 使用说明

1.分别以job和deptno分组求和select sum(sal),job,deptno from emp group by grouping sets(job,deptno); 2.2^n-1分组(n表示列的数量,如果有括号里面的括起来的多个列算一个列 举例:cube((a,b),c)n=2;cube(a,b) n=2;select sum(sal) ,deptno,job from emp group by cube(deptno,job);cube__>2^n      --group

Android开发 - 掌握ConstraintLayout(九)分组(Group)

使用ConstraintLayout后我们的布局是没有层级关系的,各个View之间都是平级关系,但是如果根据某个业务条件来控制多个View的显示与否,我们需要分别对每个View进行控制,需要调用多次setVisibility().这样就显得非常不方便. 本文所介绍的Group就是解决这个问题的. Group就是一个分组,可以关联多个View,从而只需要对这个分组进行控制就可以实现这样的场景. 我们下面来介绍它的使用. 添加分组 首先,我们添加一个Group: 关联元素 然后将页面上的元素拖动到这

LeetCode 49. 字母异位词分组(Group Anagrams)

49. 字母异位词分组 49. Group Anagrams 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ??["ate","eat","tea"], ??[&

Asp.Net Core 2.x 和 3.x WebAPI 使用 Swagger 时 API Controller 控制器 Action 方法 隐藏 hidden 与 and 分组 group

1.前言 为什么我们要隐藏部分接口? 因为我们在用swagger代替接口的时候,难免有些接口会直观的暴露出来,比如我们结合Consul一起使用的时候,会将健康检查接口以及报警通知接口暴露出来,这些接口有时候会出于方便考虑,没有进行加密,这个时候我们就需要把接口隐藏起来,只有内部的开发者知道. 为什么要分组? 通常当我们写前后端分离的项目的时候,难免会遇到编写很多接口供前端页面进行调用,当接口达到几百个的时候就需要区分哪些是框架接口,哪些是业务接口,这时候给swaggerUI的接口分组是个不错的选