RBAC

基于角色的权限访问控制(Role-Based Access Control)

表结构设计

权限分组和权限操作的意义 : 每一个权限都是对应着增删改查的操作, 将相同数据的操作放到一个组中, 可以在渲染时判断该用户在本页面数据中是否可以执行其他操作, 可以控制按钮的渲染

流程说明

初次登陆时获取用户权限 :

  • 连表查询 : 查询该用户所有的角色能访问的地址, 然后去重
  • 组织数据 : 将所有权限按组分, 保存路由和可以进行的操作(为了控制按钮)

再次登录时判断

获得请求的路径, 与每个组下的路径匹配, 匹配成功保留该组的操作, 终止循环. 如果循环没有被终止, 则该用户无权访问该路径

左侧菜单栏的控制

用户登录时, 将菜单信息也读取出来写入session

要获取的信息 :

  • 菜单名 
  • 菜单ID
  • 权限的url 
  • 权限的标题  
  • 父ID (并不是所有的路由都要展示在左侧栏中, 这个只有没有父ID的才需要渲染)

查到数据循环构建

获取当前路由

构建字典, 匹配成功就将本路由与所属菜单的的active均改为True

最终要构建的形式

menu_dict = {  #键是菜单表的主键
    1: {
        "title": "菜单一",  # 菜单名
        "active": False, # 是否展开菜单
        "children": [
            {"title": "添加用户", "url": "xxxxxxxxxxx", "active": False},
            # 字典中的"active"是是否标识,只要有二级菜单被标识,则一级菜单一定是展开的
            {"title": "查看用户", "url": "xxxxxxxxxxx", "active": False},
            ]},
 
    2: {
        "title": "菜单二",
        "active": False,
        "children": [
            {"title": "添加用户", "url": "xxxxxxxxxxx", "active": False},
            {"title": "查看用户", "url": "xxxxxxxxxxx", "active": False},
        ]}
}

 

posted @ 2018-09-26 11:33  瓜田月夜  阅读(133)  评论(0)    收藏  举报