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. CTF中遇到的php

    1.if(eregi("hackerDJ",$_GET[id])) {   //eregi字符串对比 echo("<p>not allowed!</p& ...

  2. HTML,CSS,Javascript,PHP在网站结构中扮演的“角色”

    ①HTML   在网站结构中使用来,展示网页内容的: ②CSS   在网站结构中使用来,美化页面,如字体颜色大小等: ③Javascript(JS)   在网站结构中使用来,让页面动起来,提高浏览体验 ...

  3. supersocket/SocketEngin/BootstrapFactory.cs 详解

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using SuperSoc ...

  4. C语言I博客作业01

    C语言I博客作业01 作业1 这个作业属于哪个课程? C语言程序设计I 这个作业要求在哪里? https://edu.cnblogs.com/campus/zswxy/CST2019-2/homewo ...

  5. windows下PyCharm安装及使用 【转自 https://blog.csdn.net/yctjin/article/details/70307933?locationNum=11&fps=1】

    一.首先安装pycharm,可以参考这篇文章:http://www.jianshu.com/p/042324342bf4 搭建环境 1.win10_X64,其他Win版本也可以.2.PyCharm版本 ...

  6. Kubernetes 时代的安全软件供应链

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏  阿里云 ...

  7. 一句话总结flux,以及我们为何需要flux

    如果让你用一句话总结一下什么是flux,该怎么说? 官网上有这样的介绍:flux是一种思想,一种框架,是facebook给react... 这样的解释对程序员来说,显得过于抽象又不具体了. 阮老师的文 ...

  8. Web安全-之文件上传漏洞场景

    1   上传漏洞危害介绍 上传是Web中最常见的功能,如果上传功能存在设计.编码缺陷,就容易形成上传漏洞,从而成为致命的安全问题,攻击者可以通过上传脚本木马,实现查看/篡改/删除源码和任意涂鸦网页,可 ...

  9. 转:使用JSR-303进行校验 @Valid

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  10. js之观察者模式和发布订阅模式区别

    观察者模式(Observer) 观察者模式指的是一个对象(Subject)维持一系列依赖于它的对象(Observer),当有关状态发生变更时 Subject 对象则通知一系列 Observer 对象进 ...