原理:
1、简单管理
2、角色多管理(就要设置权限)
  a. 登录
    - session中放置用户信息(检测是否已经登录)
    - session中放置权限信息(检测是否有权访问)
    {
      "/index.html":[get,delete,select ,update],
      "/order.html":[get,delete,select ,update],
    }
    - session中放置菜单,权限信息(用于生成多级的动态菜单)。就不用每次在数据库里面去取数据了
  b. 访问网站其他功能:http://www.baidu.com/xxx.html
    - 获取当前访问的url,request.path_info
    -
      匹配/xxx.html?md=get
      根session里面的权限信息进行匹配(检测是否有权访问)
      {
        "/index.html":[get,delete,select ,update],
        "/order.html":[get,delete,select ,update],
        "/xxx.html":[get,delete,select ,update],
      }
      如果匹配成功之后,在进行一次匹配
      第一次匹配的是url,第二次匹配的是方法


      request.permission_code = "get"
      request.permission_code = [get,delete]
      目的是传到视图函数,当视图函数写业务逻辑的时候根据这两个值来判定视图该怎么写

      ps:两次匹配的时候都是用中间件来实现的
  c.在视图中:
      得到这两个值,
      request.permission_code = "get" #业务逻辑的增加,修改等
      request.permission_code = [get,delete] #为了给前端显示功能按钮


  e.创建动态菜单【多级菜单】
      - 当前用户的权限(从数据库获取,但是这样每次请求数据库效率不高,可以放置在session中)
      - 所有的菜单 (从数据库获取)
      - 让权限和菜单实现挂靠
        这个菜单只是在页面上使用,推荐用simple_tag来用
        1、权限挂到菜单上
        2、菜单父子关系处理
        3、递归生成菜单
      辅助:
        css
        js


基本使用:
  1、导入rbac
    - 表
    - 中间件
    - service 初始化操作
    - simple_tag

  2、注册app
  3、用户登录
      初始化权限信息:service.init_permission(request,user_id)
      本质就是吧权限的信息和菜单的信息放在session中
  4、在settings中配置中间件
  5、导入{% rbac_menu request %}
  其他配置
....

posted on 2017-12-05 14:45  海燕。  阅读(2867)  评论(0编辑  收藏  举报