原文:https://www.cnblogs.com/linxiyue/p/4060817.html
Django的权限系统很简单,它可以赋予users或groups中的users以权限。
Django admin后台就使用了该权限系统,不过也可以用到你自己的代码中。
User对象具有两个ManyToManyField字段,groups和user_permissions
1
2 3 4 5 6 7 8 9 |
groups = models.ManyToManyField(Group, verbose_name = _( 'groups' ),
|
可以像其它的django Model一样来访问他们:
1
2 3 4 5 6 7 8 |
myuser.groups = [group_list]
|
权限是作为一个Model存在的,建立一个权限就是创建一个Permission Model的实例。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
@python_2_unicode_compatible
|
字段fields
name:必需。50个字符或更少,例如,’Can Vote‘
content_type:必需,一个对于django_content_type数据库table的引用,table中含有每个应用中的Model的记录。
codename:必需,100个字符或更少,例如,'can_vote'。
如果要为某个Model创建权限:
1
2 3 4 5 6 7 |
from django.db import models
|
如果这个Model在应用foo中,则权限表示为'foo.can_vote',检查某个用户是否具有权限myuser.has_perm('foo.can_vote')
如果已经在 INSTALLED_APPS配置了django.contrib.auth,它会保证为installed applications中的每个Django Model创建3个缺省权限:add, change 和 delete。
这些权限会在你第一次运行 manage.py migrate(1.7之前为syncdb) 时创建。当时所有的models都会建立权限。在这之后创建的新models会在再次运行 manage.py migrate时创建这些默认权限。这些权限与admin管理界面中的创建,删除,修改行为是一一对应的。
假设你有一个应用 foo ,其中有一个模型 Bar, 你可以用下述方法来测试基本权限:
add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')
权限模型( Permission model)一般不直接使用。
组也是作为Model存在的:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
@python_2_unicode_compatible
|
字段fields:
name:必需,80个字符或更少,例如, 'Awesome Users'。
permissions:ManyToManyField to Permission
1
2 3 4 |
group.permissions = [permission_list]
|
除了可以使用Model meta来创建权限,也可以直接用代码创建。
例如,为myapp应用中的BlogPost模型创建一个can_publish权限:
1
2 3 4 5 6 7 8 |
from myapp.models import BlogPost
|
权限可以被赋予一个User对象通过它的user_permissions属性或者赋予一个Group通过它的permissions属性。
User的权限检查时是可以被缓存的,如果一个新权限被赋予一个User,如果再立即检查是不会被检查出来的。最简单的方法是重新fetch User对象。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from django.contrib.auth.models import Permission, User
|
permission_required(perm[, login_url=None, raise_exception=False])
检查用户是否具有某个权限,类似于@login_required()
1
2 3 4 5 |
from django.contrib.auth.decorators import permission_required
|
user的的权限保存在模板变量 {{ perms }}中,是django.contrib.auth.context_processors.PermWrapper实例。
1
|
{{ perms.foo }}
|
上面的单属性是User.has_module_perms的代理。如果user拥有foo中的任一权限,则为True
1
|
{{ perms.foo.can_vote }}
|
上面的两级属性查询是User.has_perm的代理,如果用户拥有foo.can_vote权限则为True。
例如:
1
2 3 4 5 6 7 8 9 10 11 |
{ % if perms.foo
|
参与评论
手机查看
返回顶部