Django源码学习-23-Permission
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
from django.contrib.auth.models import Group
字段fields:
name:必需,80个字符或更少,例如, 'Awesome Users'。
permissions:ManyToManyField to Permission
group.permissions = [permission_list]group.permissions.add(permission, permission, ...)group.permissions.remove(permission, permission, ...)group.permissions.clear()
权限有很多,一个模型就有最少三个权限,如果一些用户拥有相同的权限,那么每次都要重复添加。这时候分组就可以解决这种问题了,可以把一些权限归类,然后添加到某个分组中,之后再把和把需要赋予这些权限的用户添加到这个分组中,就比较好管理了。分组使用的是django.contrib.auth.models.Group模型, 每个用户组拥有id和name两个字段,该模型在数据库被映射为auth_group数据表。
分组操作:
① 创建分组
Group.object.create(group_name)
② 某个分组上的权限,多对多的关系
group.permissions:
③ 添加权限
group.permissions.add:
④ 移除权限
group.permissions.remove:
⑤ 清除所有权限
group.permissions.clear:
⑥ 获取用户所属组的权限
user.get_group_permissions():
⑦ 某个用户上的所有分组,多对多的关系
user.groups
def operate_group(request): # 创建一个分组 #组和权限是多对多关系 多个组可以拥有多个权限 # group = Group.objects.create(name='运营') # content_type = ContentType.objects.get_for_model(Article) # permissions = Permission.objects.filter(content_type=content_type) # group.permissions.set(permissions) # group.save() #一个组拥有了权限 一个 用户拥有了组 不就等同于一个用户拥有了权限吗?? #给指定用户添加分组,用户和分组是多对多关系一个用户可以拥有多个组 # 定义user的时候并没有定义group那么 group是哪里来的?? # group = Group.objects.get(name='运营') user = User.objects.get(telephone='123123') # user.groups.add(group) # user.save() # 获取用户所属组的权限。 print(user.get_group_permissions()) #user.has_perm: # user.has_perms 可以判断多个权限 # def has_perms(self, perm_list, obj=None): # return all(self.has_perm(perm, obj) for perm in perm_list) return HttpResponse('操作分组!')
1.首先判断user.permissions 下有没有这个权限,如果有:就True。
2.如果user.permissions下没有这个权限,就会判断所属分组下有没有这个权限;如果有则还是True。
在模板中使用权限:
在settings.TEMPLATES.OPTIONS.context_processors下,因为添加了django.contrib.auth.context_processors.auth上下文处理器,因此在模板中可以直接通过perms来获取用户的所有权限。
{% if perms.应用名.权限标识 %} <!-- 这里是有权限才显示的内容 -->{% endif %}