django-guardian

  • 可实现对象级的权限控制
  • 只判断权限并不控制创建

使用

  1. 安装:pip install django-guardian
  2. settings.py/installedapp变量列表中添加guardian
  3. settings.py中添加
    'django.contrib.auth.backends.ModelBackend', # this is default
    'guardian.backends.ObjectPermissionBackend',
)
  1. 定义user,可不定义,但一定要注意--- 继承 django.contrib.auth.models 中的user
  2. 定义其他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)

此处生成数据库后,会有对应的表。

  1. 分配权限
from guardian.shortcuts import assign_perm
assign_perm('add_row', group/user, row1)  # 对象级控制
assign_perm('testmodel.add_row', group/user)  # 模型级控制
  1. 检验
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)

你可能感兴趣的:(django-guardian)