JianghuJS-页面权限配置&接口权限配置
学习目标
- 学习页面权限、resource权限规则
- 根据示例尝试设置页面及数据权限
1. 页面权限说明
页面权限是指限制某些用户或用户组对页面的访问权限。在JianghuJS中,可以通过配置_user_group_role_page
数据来实现页面权限的控制。
页面权限表
- 在
page
表中定义页面
字段 | 描述 |
---|---|
pageId | '页面ID' |
pageName | '页面名' |
pageType | '页面类型' showInMenu: 展示在菜单上, dynamicInMenu: 只有访问页面时才展示在菜单上, seo: 文章类的seo页面 |
sort | '排序' |
pageHook | '页面渲染Hook, 主要用于页面render之前的数据挂载' { "beforeHook":[{"field": "doc", "service": "xxx", "serviceFunc": "xxx"}] } |
- 在
user_group_role_page
表中定义用户有哪些页面的权限
字段 | 描述 |
---|---|
user | 'userId 或者 通配符; 通配符: * ' |
group | 'groupId 或者 通配符; 通配符: * ' |
role | 'roleId 或者 通配符; 通配符: * ' |
page | '页面ID' |
allowOrDeny | '权限策略, allow: 允许、deny: 拒绝; deny的执行逻辑高于allow'' |
页面权限逻辑
1.每一次page
请求到达后端,后端首先根据cookie
获取用户信息
2.从用户信息中获取 userId
& userGroupRoleList
3.根据user_group_role_page
表和page
表的配置计算出用户能访问的页面列表allowPageList
4.判断当前page
请求是否在allowPageList
内
两个隐式group(login&public)
- 登录后用户在
login
group
内- 所有的用户都在
public
group
内
2. 页面权限配置示例
所有人访问
- 在
user_group_role_page
表中配置login页面
:
user | group | role | page | allowOrDeny |
---|---|---|---|---|
* | public | * | login | allow |
登录后访问
- 在
user_group_role_page
表中配置manual页面
:
user | group | role | page | allowOrDeny |
---|---|---|---|---|
* | login | * | manual | allow |
指定用户访问
- 在
user_group_role_page
表中配置test页面
:
user | group | role | page | allowOrDeny |
---|---|---|---|---|
W00001,W00002,W00002 | * | * | test | allow |
指定群组访问
- 在
user_group_role_page
表中配置test页面
:
user | group | role | page | allowOrDeny |
---|---|---|---|---|
* | adminGroup | * | test | allow |
指定群组的指定角色访问
- 在
user_group_role_page
表中配置test页面
:
user | group | role | page | allowOrDeny |
---|---|---|---|---|
* | adminGroup | appAdmin | test | allow |
3. 接口(Resource)权限说明
接口权限是指限制某些用户或用户组对Resource的访问权限。在JianghuJS中,可以通过配置_user_group_role_resource
数据来实现Resource权限的控制。
接口权限表
- 在
resource
表中定义接口
字段 | 描述 |
---|---|
pageId | 'pageId' |
actionId | 'actionId' |
.... |
resourceId(接口Id) =pageId.actionId
- 在
user_group_role_resource
表中定义用户有哪些接口的权限
字段 | 描述 |
---|---|
user | 'userId 或者 通配符; 通配符: * ' |
group | 'groupId 或者 通配符; 通配符: * ' |
role | 'roleId 或者 通配符; 通配符: * ' |
resource | 'resourceId' |
allowOrDeny | '权限策略, allow: 允许、deny: 拒绝; deny的执行逻辑高于allow'' |
接口权限逻辑
1.每一次接口请求到达后端,后端首先根据authoken
获取用户信息
2.从用户信息中获取 userId
& userGroupRoleList
3.根据user_group_role_page
表和resource
表的配置计算出用户所能访问的接口列表allowResourceList
4.判断当前page
请求是否在 allowResourceList
内
两个隐式group(login&public)
- 登录后用户在
login
group
内- 所有的用户都在
public
group
内
4. 接口权限配置示例
所有人可访问
- 在
user_group_role_resource
表中配置login.passwordLogin
:
user | group | role | resource | allowOrDeny |
---|---|---|---|---|
* | public | * | login.passwordLogin | allow |
登录后可访问
- 在
user_group_role_resource
表中配置frontendDemo01.selectItemList
:
user | group | role | resource | allowOrDeny |
---|---|---|---|---|
* | login | * | frontendDemo01.selectItemList | allow |
指定用户可访问
- 在
user_group_role_resource
表中配置frontendDemo01.selectItemList
:
user | group | role | resource | allowOrDeny |
---|---|---|---|---|
W00001,W00002,W00002 | * | * | frontendDemo01.selectItemList | allow |
指定群组可访问
- 在
user_group_role_resource
表中配置frontendDemo01.selectItemList
:
user | group | role | resource | allowOrDeny |
---|---|---|---|---|
* | adminGroup | * | frontendDemo01.selectItemList | allow |
指定群组的指定角色可访问
- 在
user_group_role_resource
表中配置frontendDemo01.selectItemList
:
user | group | role | resource | allowOrDeny |
---|---|---|---|---|
* | adminGroup | appAdmin | frontendDemo01.selectItemList | allow |
小结
本文介绍了JianghuJS中页面权限配置和接口权限配置的方法。页面权限可以限制某些用户或用户组对页面的访问权限,接口权限可以限制某些用户或用户组对接口的访问权限。页面权限和接口权限的配置是通过配置 _user_group_role_page 和 _user_group_role_resource 数据来实现。在配置时,可以指定用户、用户组、角色以及页面或接口,并设置允许或拒绝访问。本文还提供了配置示例。
课后练习
- 将
test页面
配置为W00001
用户不能访问 - 将
frontendDemo01.selectItemList
resource 配置为只允许adminGroup
用户组访问