django 权限控制教程
2022年7月11日大约 2 分钟约 642 字
django 权限系统
django默认有一个简单的开箱即用的基于角色的权限系统
在数据库中的关系
- 用户表与角色表有一个直接的多对多关系,在这里就不讲了,使用角色的方式,逻辑更清晰一些。
给模型配置权限
- 我们在使用权限系统时,首先得先把权限配置好,django的权限系统是表级的权限系统,默认给每张表配置了 view, add, change, delete 这四个权限
- 配置权限是针对数据库中的
auth_permission
表,表里面记录了哪个表有哪些权限,显示成什么名字 - 权限表的默认权限的codename字段命名:
操作动作_模型名小写
我们可以再额外配置一些自定义权限:
articles/models.py
# 文章
class ArticleModel(models.Model):
title = models.CharField('文章标题', max_length=100, help_text="请输入文章标题")
content = models.TextField('文章内容', help_text="请输入文章内容", default='', blank=True)
tags = models.ManyToManyField(ArticleTagModel, related_name="tags", blank=True, default=None, verbose_name='标签',
help_text="请选择一些标签")
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
owner = models.ForeignKey(UserModel, on_delete=SET(0), verbose_name='关联用户', help_text="关联用户自动填充", db_constraint=False)
class Meta:
verbose_name = "文章"
verbose_name_plural = verbose_name
ordering = ('-update_time',)
permissions = (
('all_tags_contains_bagua', '管理带有八卦标签的文章'),
('all_title_contains_公司', '管理带有 公司 标题关键字的文章')
)
def __str__(self): # 在后台admin列表中显示的字段
return self.title + " —— " + self.owner.name # 这里填入的字段的数据内容不要为空
分配权限
django分配权限有两种方式,一种是将角色分配给用户,另一种是直接将权限分配给用户,我们主要是针对第一种进行讲解
将角色分配给用户
创建角色
将权限分配给角色
# 给角色添加权限
group_instance.permissions.add(permission对象1, permission对象2)
# 给角色删除权限
group_instance.permissions.remove(permission对象1, permission对象2)
# 清空角色权限
group_instance.permissions.clear()
- 让用户加入角色
# 给用户添加角色
user_instance.groups.add(groups对象1, groups对象2)
# 给用户删除角色
user_instance.groups.remove(groups对象1, groups对象2)
# 清空用户的角色
user_instance.groups.clear()