django中使用content_type表进行存储app与model的关系。在permission表中设立了name(权限的名字,中英文均可)content_type_id(与content_type是外键关系,用于绑定model)codename(在写代码时使用的权限名)那么如何自定义权限呢?

一、自定义权限

实例代码:

def add_permission(request)
'''自定义创建新的权限'''
# 获取model在content_type对象
content_type = ContentType.objects.get_for_model(Article)
permission = Permission.objects.create(codename='black_article', name='拉黑文章', content_type=content_type)
return HttpResponse('权限创建成功')

或者,在建立model时就添加上:

from django.contrib.auth.models import ContentType, Permission
class Article(models.Model):
title = models.CharField(max_length=64, verbose_name="标题")
content = models.TextField(verbose_name="内容") class Meta:
db_table = 'Article'
permissions = [
('black_article', '拉黑文章')
]

二、用户与权限绑定

权限本身只是一个数据,必须和用户进行绑定,才能起到作用。User模型和权限之间的管理,可以通过以下几种方式来管理:

1、mysuer.user_permissions.set(permission_list): 直接给定一个权限的列表。
2、mysuer.user_permissions.add(permission, permission,...): 一个个添加权限。
3、mysuer.user_permissions.remove(permission, permission,...): 一个个删除权限。
4、myuser.user_permissions.clear(): 清除权限。
5、myuser.get_all_permissions(): 获取所有的权限。
6、myser.has_perm('<app_name>.<codename>'): 判断是否拥有某个权限。权限参数时一个字符串,格式是:app_name.codename
实例代码:

def user_add_permission(request):
'''用户权限实例'''
# 获取当前登录的用户对象
user = request.user
# 获取app01的所有权限
content_type = ContentType.objects.get_for_model(app01)
permissions = Permission.objects.filter(content_type=content_type)
# 为当前用户添加app01的所有权限
# 方式一
user.user_permissions.set(permissions)
# 方式二
user.user_permissions.add(permissions[1], permissions[2])
user.save()
# 或者使用这个原理:*[1,2,3] = 1,2,3进行添加
user.user_permissions.add(*permissions)
user.save()
# 查看当前用户的所有权限
print(user.get_all_permissions())
# 删除当前用户所有权限
user.user_permissions.clear()
return HttpResponse('査看权限')

三、分组操作

1、Group.object.create(group_name):创建分组
2、group.permissions : 某个分组上的权限。多对多的关系。
1> group.permissions.add : 添加权限
2> group.permissions.remove : 移除权限
3> group.permissions.clear : 清除所有权限
4> user.get_group_premissions() : 获取用户所属组的权限。
3、user.groups : 某个用户上的所有分组。多对多的关系。

示例代码如下:

def operate_group(request):
group = Group.object.create(name='编辑') # 创建编辑这个分组
content_type = ContentType.object.get_for_model(Article) #
permissions = Permission.object.filter(content_type=content_type) # 获取Article表创建的所有权限
# 添加权限
group.permissions.set(permissions) # 方式一:直接将所有权限添加
group.permissions.add(*permissions) # 方式二:将所有权限添加
group.permissions.add([permissions[0],permissions[1]) # 添加指定的权限
group.save()
# 将用户添加到分组
group = Group.object.filter(name='编辑').first()
user = User.object.first()
user.group.add(group)
user.save()
return HttpResponse('成功')

四、在模版中使用权限管理:

在settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模版中可以直接通过perms来获取用户的所有权限。示例代码如下:

{% if perms.APP名.权限名 %}  //拥有该权限名才会看到下面的链接
<a href = '/article/'>文章</a>
{% endif %}

django 用户与权限管理的更多相关文章

  1. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  2. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

    今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...

  3. MySQL用户与权限管理

    执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...

  4. mysql用户和权限管理

    用户和权限管理 Information about account privileges is stored in the user, db, host, tables_priv, columns_p ...

  5. 【linux相识相知】用户及权限管理

    linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...

  6. linux用户及权限管理

    [文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  7. Mysql 用户,权限管理的几点理解。

    前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...

  8. DQL用户、权限管理(mysql8.0)

    DQL用户.权限管理(mysql8.0) 查看所有的用户: use mysql; -- 使用mysql数据库 select * from user; -- 查询user表中的全部信息,也就是用户 创建 ...

  9. Jenkins2.32用户和权限管理策略

    前言 在使用jenkins的过程中,需要为不同的角色分配相应的权限,如果jenkins的用户数据能和公司现在的帐号系统结合起来那会更好. 关于如何为用户分组,我推荐使用 role based auth ...

随机推荐

  1. JAVA——汉诺塔

    大家还记得某年春晚小品那个把大象放冰箱需要几步吗? 今天,我准备写的是汉诺塔,有三个魔法石柱,分别:诚实.勇敢.正直.其中有一个石柱上从大到小,从地向上依次排放着四个魔法圆环,需要将那四个魔法圆环分别 ...

  2. 【Luogu P1502】窗口的星星

    Luogu P1502 题意很好理解,就是问给出的矩形套住的最大和. 但是做起来却十分麻烦. --来自疯狂爆10分的愤怒 一个比较高效的思路是--把每一个星星作为左下角向右上方拓展形成一个矩形, 拓展 ...

  3. 2019牛客暑期多校训练营(第九场)Quadratic equation——二次剩余(模奇素数)

    题意:给定p=1e9+7,构造x,y使其满足(x+y) mod p = b,(x*y) mod p = c . 思路:不考虑取模的情况下, .在取模的意义下,,因为a是模p的二次剩余的充分必要条件为  ...

  4. 从Excel到Python:最常用的36个Pandas函数

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

  5. docker概念

    一.docket概述 什么是docker? 为什么docker会出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不 ...

  6. Kafka use zkCli.sh to check topic offset on linux

    > ./zkCli.sh -server zk1host:port,zk2host:port,zk3host:port >help ZooKeeper -server host:port ...

  7. 10个常见的HTTP状态码

    目录 500 内部服务器错误 404 文件未找到 403 禁止访问 400 错误请求 401 未经授权 200 请求成功 206 部分内容 301 永久重定向 302 临时重定向 502 无效网关 H ...

  8. Apache ServiceComb 开源两周年,聊聊其与微服务的前世今生

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  9. C#DateTime格式转换全介绍

    DateTime与字符串转换: DateTime()与转换为字符串主要依靠DateTime().ToString(string format) 函数,以我的理解,参数format大体分为单个字母和多个 ...

  10. iOS开发经常用到的国外网站,让我们接轨国外的最新技术吧!

    转自:http://www.bubuko.com/infodetail-787949.html 工欲善其事必先利其器,最近发现临时查找一些东西容易浪费时间,花了点时间整理一下常用的网站,方便以后备用. ...