权限的配置和使用

Django权限讲的比较好的一个网址 : http://www.jianshu.com/p/01126437e8a4
 
 

系统中做权限的划分:

老师,学生 
权限是针对于某一个model设定的
当添加一个model的时候就会有对应权限关联上
默认的权限有add,change,delete
 
 is_active  is_staff  is_superuser为用户的权限
is_staff是否可以登录后台
 
用户权限模块:Users,Permissions,Groups(他们之间互相多对多的关联
每个model默认的权限:add,change,,delete
 
表结构:
auth_group  ->分组信息表
auth_group_permissions  ->分组和权限的关联表
auth_permission   ->权限信息表
user_aoo_userprofile  ->用户信息表
user_app_userprofile_groups ->用户和分组的关联表
user_app_userprofile_user_permissions ->用户和权限的关联表
 
在Permissionmixin提供管理权限的API
 
用navicate工具分析数据模型之间的关系,可以画,也可以直接导入
 
如果用户数据某个组(组分了一些权限),而且管理页面也给用户赋予一些权限了,就是单独给的权限,那么用户的实际权限是  用户权限+组权限
 
 
权限  分组   用户 是一个多对多的关系,需要研究它们是怎么关联上的
 
 
 
三:权限的设计使用
 

2.1 Permission

如上文所述,Django定义每个model后,默认都会添加该model的add, change和delete三个permission,自定义的permission可以在我们定义model时手动添加:

1
2
3
4
5
6
7
8
class Task(models.Model):
    ...
    class Meta:
        permissions = (
            ("view_task""Can see available tasks"),
            ("change_task_status""Can change the status of tasks"),
            ("close_task""Can remove a task by setting its status as closed"),
        )

每个permission都是django.contrib.auth.Permission类型的实例,该类型包含三个字段name,codename和content_type,其中content_type反应了permission属于哪个model,codename如上面的view_task,代码逻辑中检查权限时要用,name是permission的描述,将permission打印到屏幕或页面时默认显示的就是name

2.2 User Permission管理

User对象的user_permission字段管理用户的权限:

1
2
3
4
5
6
7
8
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...) #增加权限
myuser.user_permissions.remove(permission, permission, ...) #删除权限
myuser.user_permissions.clear() #清空权限
 
##############################################################
# 注:上面的permission为django.contrib.auth.Permission类型的实例
##############################################################

检查用户权限用has_perm()方法:

myuser.has_perm('myapp.fix_car')

has_perm()方法的参数,即permission的codename,但传递参数时需要加上model 所属app的前缀,格式为<app label>.<permission codename>。

无论permission赋予user还是group,has_perm()方法均适用

 

第一设置权限,第二注册权限

 
 
 
 
 
 
 
 
 
 





原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749570.html