惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - hgdfr

Django1.5内置的用户认证系统介绍(之五)在admin后台管理用户 --by hillfree Django1.5内置的用户认证系统介绍(之四)Authentication in Web requests --by hillfree Django1.5内置的用户认证系统介绍(之二)使用User对象--by hillfree Django1.5内置的用户认证系统介绍(之一)--by hillfree Django REST Framework Tutorial 5:关系与超链接API(中文版教程)by hillfree Django REST Framework Tutorial 4:认证与权限(中文版教程)by hillfree Django REST Framework Tutorial 3:基于类的Views(中文版教程)by hillfree Django1.5+Python3.3下groundwork的使用 Django1.5中设置静态目录的简要说明 参照《鲜活的数据:数据可视化指南》第2章:抓取网页数据(历史天气记录)的Python程序 - hgdfr Python3.3中如何产生伪随机数 《鲜活的数据:数据可视化指南》第2章 收集数据 Python3.3源码 CSCW领域的“老”词和“新”词 FOAF简介和朋友圈子 Class Library类型的工程难道不能用app.config? 配置文件中的DataDirectory在那里设置? 自己写的类需要重写ToString(), HashCode(), Equal()吗? 注释中如果出现尖括号怎么办?“<” - hgdfr - 博客园 Access Control Issues 有关访问控制
Django1.5内置的用户认证系统介绍(之三)权限与授权--by hillfree
hgdfr · 2013-04-13 · via 博客园 - hgdfr

说明:网上有关Django用户系统的内容不少,但是好像没有针对Django1.5的。可能是因为Django1.5目前用的人还不多吧。(python3.x貌似也是这种情况)。因为自己要用,所以顺手在学习官方文档的过程中,边看边译。基本忠于原文(>95%),小部分太啰嗦的内容就适当意译、简化了。后续还会加入部分自己的体会(会注出),供参考。如有错讹、不准确之处,还请大家指教。

Source:https://docs.djangoproject.com/en/1.5/topics/auth/default/#permissions-and-authorization

权限与授权 Permissions and Authorization

Django提供一个简单的权限系统(permissions system)。它可以将权限指定到users或groups。

Django admin后台就使用了该权限系统,不过也可以用到你自己的代码中。

Django admin后台使用了下列权限功能:

  • 使用 “add” form来为用户增加一个对象类型权限;
  • 使用 “change” form来为用户修改一个对象类型权限;
  • 使用 “delete” 来为用户删除一个对象类型权限;

权限不仅能在对象类型上设置,还可以为特定的对象实例设置。使用has_add_permission()has_change_permission() 和 has_delete_permission() 方法(在ModelAdmin 类中)。甚至可以为相同类型的不同的实例指定不同的权限。

User 对象包含两个many-to-many字段:groups 和 user_permissions. User 对象可以像其他Django model 一样直接访问相关的对象:

myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear()
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()

缺省权限Default permissions

如果已经在 INSTALLED_APPS配置了django.contrib.auth,它就会为应用中的每个Django模型创建3个缺省权限:add, change 和 delete。

这些权限会在你第一次运行 manage.py syncdb 时创建(前提是settings.py里面已经正确设置)。程序会为所有当时的models建立权限。在这之后创建的新models会在再次运行 manage.py syncdb时创建权限。

假设你有一个应用 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)一般不直接使用。

群组Groups

django.contrib.auth.models.Group 模型提供群组的功能,可将权限指定给一类用户。用户可以属于多个群组。

一个群组用户自动获得该群组的所有权限。例如,如果Site editors群组具有权限: can_edit_home_page,那么该群组的所有用户都具有该权限。

除了权限,群组还可以很方便的来分类用户,例如给他们统一的标签或扩展功能。例如:创建了一个群组 'Special users',然后你可以写代码,比如让他们可以访问特定的网站内容或给他们发送消息。

通过代码创建权限 Programmatically creating permissions

在模型的嵌入类Meta class中可以定义定制权限( custom permissions)。你可以直接创建权限。例如,你可以在myapp为 BlogPost模型创建一个 can_publish 权限:

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
 
content_type = ContentType.objects.get(app_label='myapp', model='BlogPost')
permission = Permission.objects.create(codename='can_publish',
                                       name='Can Publish Posts',
                                       content_type=content_type)

权限可以通过User的user_permissions 属性或Group的permissions 属性赋予。