- 可实现对象级的权限控制
- 只判断权限并不控制创建
使用
- 安装:
pip install django-guardian
- 在
settings.py/installedapp
变量列表中添加guardian
- 在
settings.py
中添加
'django.contrib.auth.backends.ModelBackend', # this is default
'guardian.backends.ObjectPermissionBackend',
)
- 定义user,可不定义,但一定要注意--- 继承
django.contrib.auth.models
中的user - 定义其他model
from django.contrib.auth.models import User
# Create your models here.
class Row(models.Model):
""""""
num = models.IntegerField(default=0, null=True)
content = models.CharField(default='123456789', max_length=100, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
default_permissions = ('add', 'change', 'delete')
def __str__(self):
return str(self.num)
此处生成数据库后,会有对应的表。
- 分配权限
from guardian.shortcuts import assign_perm
assign_perm('add_row', group/user, row1) # 对象级控制
assign_perm('testmodel.add_row', group/user) # 模型级控制
- 检验
user.has_perm('add_row', row1)
user.has_perm('testmodel.add_row', row1) # 对应以上第一中校验,用上面的则不行
组的使用
from django.contrib.auth.models import Group
Group.objects.get_or_create(name='user')
user_group = Group.objects.get(name='user')
assign_perm('testmodel.add_row', user_group)
user = User.objects.get(username='1')
user.groups.add(user_group)