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. [FPGA]Verilog利用PWM调制巧妙完成RGB三色彩虹呼吸灯(给简约的题目以美妙的解答)

    概述 实现彩虹呼吸灯 题目就是这么简短,但这是目前我碰到的最有意思的一道题目,因为他有无数种解决方法,并且每一种都是那么高级或者巧妙,比如 可以利用3路不同初相的PWM调制信号驱动三颗RGB灯重叠呼吸 ...

  2. 2019-11-24:postgresql数据库安装,最后报错failed to load SQLModule 问题的解决方案

    安装环境:Windows 10 问题描述:Failed to load sql modules into the database cluster 原因在于 Postgresql 没有安装完全. 解决 ...

  3. day29 文件的上传和下载 socketserver(并发)

    文件上传的讲解: import subprocess res=subprocess.Popen("dir", shell=True, stderr=subprocess.PIPE, ...

  4. 纵论WebAssembly,JS在性能逆境下召唤强援

    webassembly的作用 webassembly是一种底层的二进制数据格式和一套可以操作这种数据的JS接口的统称.我们可以认为webassembly的范畴里包含两部分 wasm: 一种体积小.加载 ...

  5. 程序员的算法课(14)-Hash算法-对海量url判重

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  6. django框架简介及自定义简易版框架

    web应用与web框架本质 概念 什么是web应用程序呢? Web应用程序就一种可以通过互联网来访问资源的应用程序, 用户可以只需要用一个浏览器而不需要安装其他程序就可以访问自己需要的资源. 应用软件 ...

  7. python函数-参数

    python函数-参数 实验室 # 演示形参是可变类型 def register(name, hobby, hobby_list=[]): hobby_list.append(hobby) print ...

  8. 当url中出现汉字

  9. 2019-2020-2 20199317《Linux内核原理与分析》第二周作业

    第一章   计算机工作原理 1   存储程序计算机工作模型      存储程序计算机的主要思想是将程序存放在计算机存储器中,然后按存储器中的存储程序的首地址执行程序的第一条指令,以后就按照该程序中编写 ...

  10. hello gulp,使用gulp的第一天。

    昨天花了一天的时间,学习了一下gulp,今天整理一下,也分享给朋友们. 首先当然是去gulp的官网逛一圈了: http://gulpjs.com/ 中文站地址: http://www.gulpjs.c ...