zoukankan      html  css  js  c++  java
  • 权限的配置和使用

    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()方法均适用

     

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

     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    Servlet基础
    JSP数据交互(二)
    Nginx的负载均衡策略及配置
    3.Nginx 配置文件详解
    java--IO总结
    网络协议--FTP协议
    java--apache对象池apche-common-pool2
    java--自定义注解(注解在编译时生效)
    java--自定义注解(注解在运行时生效)
    java--反射
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749570.html
Copyright © 2011-2022 走看看