class Meta: permission=(( 'can_view_index',' Can View Index ' ))可以看到,permissions 元选项中定义一个二元组,这个二元组的第一个元素指定了权限的 codename,第二个元素指定了权限的 name。那么如何将自定义的权限应用到系统中呢?这时就需要执行数据库迁移操作了,大家一定要记住,只要改动了 Model 就需要我们执行数据库迁移操作,在这里就不给大家进行演示了。同步之后,大家可查看 auth_permission 表,就可以看到自定义的权限了。
In [1]: from index.models import UserInfo ...: from django.contrib.auth.models import Permission ...: from django.contrib.contenttypes.models import ContentType ...: content_type = ContentType.objects.get_for_model(UserInfo) ...: permission1 = Permission.objects.create(codename = 'publish_book',name = 'Can publish books',content_type = con ...: tent_type, ...: ) ...: permission2 = Permission.objects.create(codename = 'comment_book',name = 'Can comment books',content_type = con ...: tent_type, ...: ) In [2]: permission2 Out[2]: <Permission: index | user info | Can comment books> In [3]: permission1 Out[3]: <Permission: index | user info | Can publish books>通过如下代码就给 UserInfo Model 成功添加了两个新的权限。
from django.contrib.auth.models import User User.objects.all() 返回结果:<QuerySet [<User: admin>, <User: bookstore>]>其中 admin 是超级用户不需要授予其他权限,所以我们可以通过操作 bookstore 用户的权限进行讲解。
from django.contrib.auth.models import User, Permission user=User.objects.get(username='bookstore') add_book=Permission.objects.get(codename='add_book') change_book=Permission.objects.get(codename='change_book') #查看实例对象所有权限若无任何返回值是空集合set user.get_all_permission() #将user的权限设置为当前权限值,之前权限的会自动去掉 user.user_permission.set([add_book]) #在当前权限的基础新增权限 user.user_permission.add(change_book) #同时也可接受多个权限值 user.user_permission.add(add_book,change_book) #删除权限 user.user_permission.remove(change_book) #清空所有权限 user.user_permission.clear()上述代码其实很好理解,我们在这里只对其中的一项做简单的介绍,user_permission.ser() 可以将当前用户的权限设置为当前指定的值,这里的意思就是说,无论之前 user 实例拥有多少权限,使用完这个方法后只会设置成当前的值,所以说 user 再执行完这个方法后,只拥有 add_book 权限。
from django.contrib.auth.models import User, Permission,Group add_book=Permission.objects.get(codename='add_book') change_book=Permission.objects.get(codename='change_book') #创建用户组 group_book=Group.objects.get(name="library") #添加用户组全权限 group_book.permissions.set([add_book,change_book]) #查当前用户权限 user.get_all_permission()上述语句执行之后,Group 与 Permission 的关联表 auth_group_permissions 中会增加两条记录。之前在介绍 Group 的时候曾经说过,属于某个用户组的用户会自动拥有用该户组被授予的权限。
has_perm('appname.codename(权限编码)')
而 has_perms 在校验多个权限时,需要将 n 个权限放入列表中,如下所示:has_perms(["add_book","change_book"])
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有