Django的 auth_permission 的自定义权限

只需要在Model 里的 Meta 类里面增加 permissions,然后执行
python manage.py makgemigrations
python manage.py migrate
就会在 auth_permission 表中增加实例。同时在 admin 页面为指定的用户,增加相应的权限即可。(也可以通过 Navicat 直接操作数据库,不过这有点不太高明!)

D:\xxx\djangoTest\robappdj\TestModel\models.py
class BankContact(models.Model):
    mobile = models.CharField(max_length=20)
    address = models.CharField(max_length=20)
    account = models.OneToOneField("BankAccount")
    class Meta(object):
        db_table = 'back_contact'
        # Create move_bankcontact permission instance manually in poc_permission_required  view function
        permissions = (('move_bankcontact', 'Can move bank contact'),)
    def __unicode__(self):
        return "{0}-{1}".format(self.mobile, self.address)


@permission_required('TestModel.delete_bankcontact')    --- 是 Django 框架为每个 model 默认生成的权限
def poc_permission_required(request):
    return HttpResponse('In the poc_permission_required')

当然上面的 创建自定义的权限 和 给指定用户赋予权限 等一系列过程都可以通过自己的代码来实现。

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
# 1. 创建自定义的权限
content_type = ContentType.objects.get_for_model(BankContact)
premission = Permission.objects.create(codename='copy_bankcontact',name='Can copy bank contact',content_type=content_type)

# 2. 为指定用户赋予权限
User = get_user_model()
user_obj = User.objects.get(username=request.user.username)
# # user_obj.user_permissions.add(premission)
user_obj.user_permissions.add(Permission.objects.get(id=94))

其实说白了:
执行 python mange.py migrate 就是向数据库里写入数据,而上面的 ORM 代码也是向数据库里写入数据

发布了44 篇原创文章 · 获赞 0 · 访问量 3946

猜你喜欢

转载自blog.csdn.net/cpxsxn/article/details/102589589