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条件拼接上去.