汽车网站案例网页设计,电脑自助建站,广告营销案例100例,怎么确定电商网站建设的目标前言
若依权限管理包含两个部分#xff1a;菜单权限 和 数据权限。菜单权限控制着我们可以执行哪些操作。数据权限控制着我们可以看到哪些数据。
菜单是一个概括性名称#xff0c;可以细分为目录、菜单和按钮#xff0c;以若依自身为例#xff1a; 目录#xff0c;就是页…前言
若依权限管理包含两个部分菜单权限 和 数据权限。菜单权限控制着我们可以执行哪些操作。数据权限控制着我们可以看到哪些数据。
菜单是一个概括性名称可以细分为目录、菜单和按钮以若依自身为例 目录就是页面导航也可以理解为导航父菜单二级导航或三级导航如系统管理某个父菜单没有权限表示需要隐藏或禁用这个父菜单。菜单就是导航子菜单如用户管理某个子菜单没有权限表示需要隐藏或禁用这个子菜单也就无法进入子菜单关联的页面如用户管理页面。按钮可以泛化理解为页面组件如新增某个组件没有权限表示需要隐藏或禁用这个组件也就无法执行这个组件关联的事件如点击。菜单权限
菜单权限是基于 角色 实现的如下图 菜单授权
创建或编辑菜单时设置菜单权限字符相当于菜单唯一标识符创建或编辑角色时设置该角色拥有权限的菜单列表即角色关联菜单权限标识符创建或编辑用户时设置该用户拥有的角色列表即角色关联用户
菜单鉴权
验证用户对于菜单是否有权限可以通过角色实现
获取用户拥有的角色列表如果角色列表包含这个角色则表示有权限否则表示没有权限。
也可以通过菜单权限字符实现
获取用户拥有的角色列表获取这些角色拥有权限的菜单权限字符列表如果菜单列表包含这个菜单则表示有权限否则表示没有权限。
前端鉴权
前端使用菜单鉴权时需要使用权限指令
// 角色
el-button v-hasRole[admin]管理员才能看到/el-button// 权限字符
el-button v-hasPermi[system:user:add]存在权限字符串才能看到/el-button 后端鉴权
前端鉴权只能保证可以隐藏或禁用菜单并不能保证菜单关联的后端接口请求不被非法调用若依支持在后端接口方法使用角色或权限字符声明权限
// 角色
PreAuthorize(ss.hasRole(user))// 权限字符
PreAuthorize(ss.hasPermi(system:user:list)) 若依没有为后端接口专门设计权限管理模块它认为后端接口和菜单具有对应关系可以直接使用菜单的角色或权限字符用于后端接口的权限声明。 数据权限
数据权限也是基于 角色 实现的如下图 支持五种权限模式按权限大小依次排列
全部数据权限表示拥有所有部门的数据权限自定数据权限表示拥有指定的若干部门的数据权限本部门数据权限表示仅拥有用户所属部门不包括子部门的数据权限本部门及以下数据权限表示仅拥有用户所属部门和所有子部门的数据权限仅本人数据权限表示仅拥有用户本人的数据权限
数据模式需要使用 用户 和 部门。这就要求我们创建数据表时除业务数据自身字段以外需要额外增加两个字段
userId表示用户 IDdeptId表示部门 ID
用户可以拥有多个角色但只能属于一个部门。 部门支持有父子关系角色不支持父子关系。
数据授权
创建或编辑部门时设置部门父子关系创建或编辑角色时设置角色的数据权限模式如果是自定数据权限需要设置部门列表
数据鉴权
数据鉴权实际是数据过滤即过滤用户没有权限的数据。实际使用时我们只需要在查询数据的方法上添加注解
DataScope 声明启用数据过滤即可。这样若依查询数据时仅会返回用户有权限的数据。
若依对于使用数据权限的数据方法实现是有一定要求的我们不描述具体细节仅给出核心流程
获取用户的角色列表获取这些角色的数据权限模式计算这些数据权限中的最大权限根据这个最大权限转换成该权限对应的部门 ID一个或多个 或 用户 ID动态修改查询数据方法的查询 SQL 语句添加基于部门 ID 或用户 ID 的过滤语句执行修改后的查询 SQL 语句
可以看出数据权限本质上就是基于部门 ID 或用户 ID 的数据过滤只是这个过滤是若依为我们自动完成的。
结语