Jeecboot框架是如何设计权限系统?

83 阅读2分钟

vue: 前端有router.js ,存放路由信息。如果是固定写死的话,那么没法做到每个用户,有不同的菜单权限.

动态路由

路由信息有后台接口提供,用户登录成功,就加载路由数据.

前端路由常见的几个信息:

  • 前端路由组件
  • 路由组件的名称
  • url
  {
    path: '/',
    name: 'dashboard',
    component: TabLayout,
    meta: { title: '首页' },
    redirect: '/dashboard/analysis',
    children: [
    ]
  }

关于菜单的权限或者叫功能权限

只有和角色挂钩即可,通过关系表来存储即可.

菜单本质上就是页面权限,表示当前用户,是否具有访问该页面的权限.

按钮权限

按钮权限: 表示当前用户,是否能操作某个页面下的按钮.

按钮权限也是和角色挂钩的.

通过后台提供@RequiresPermissions("useCenter:user:add")来实现.

实现方式: 通过自定义注解,切面来实现.

前端通过hasPremission("useCenter:user:add")指令来实现.

那么前端在登录之后,就要获取所有的权限点.如果没有权限,那么就不会显示该按钮,或者disable

后台接口和按钮之间的关系.这种是通过硬编码的方式来实现的,通过打标.

按钮权限和菜单权限有什么关系

父子关系,按钮一定是挂在某个菜单下面的.

按钮,一定是体现在某个页面的.那么一定是父子关系.

数据权限

和角色有关.不同的角色,查看不同范围的数据.

数据权限: 表示当前用户,是否能访问某个页面的所有数据,还是某个部分的数据.

数据规则,也是挂在菜单下面.

通过动态拼sql来实现.需要内置上下文,比如说按照租户,部门来划分数据范围.那么每个数据表的这个几个字段是固定的.

通过mybatis拦截器来实现,拦截select 语句,然后将where条件拼接上去.