权限管理
什么是 RBAC 权限管理
RBAC:Role-Based Access Control,基于角色的访问控制。 其基本思想:对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有权限。
这样做的好处是,增强系统管理的扩展性,对于批量用户的权限变更,仅需变更该批用户角色对应权限即可,而无需对该批每个用户变更权限。 这个模型有三个关键名词:用户、角色、权限:
- 用户:使用系统的人,一个用户可以同时有多个角色,比如部分负责人、销售、HR。
- 角色:权限的集合,一个角色可以有多个权限。比如部分负责人可以查看和修改商品信息、执行退款操作。
- 权限:数据权限或业务权限,例如:修改商品表字段信息、调用退款行为流。
为什么需要角色权限管理
- 一般企业后台管理系统,除了管理员,不同账号通常需根据职位、责任设定不同的系统权限。比如部门负责人、销售、HR。
- zion可以通过前端页面或组件的行为触发来直接操作数据库,但部分字段应该只允许系统计算或管理员设置的,比如文章的阅读数、收藏数及是否加精置顶,这些字段不应允许普通用户在前端直接修改,此时也需要通过权限控制来保证系统的安全稳定。
前排重要提示
- 权限系统可以精确控制每个用户对于每个数据模型、API、行为流的访问权限。 一旦修改权限配置并更新,可能会直接影响线上用户、已上线的项目,请认真阅读以下使用说明。
- 小程序实时预览不支持权限测试,小程序请预发布后扫码在手机上测试> 版本权益差异: 【基础版】:只允许在默认的 2 个角色上修改权限配置 【高级版】:允许新增 1 个自定义角色 【专业版】:允许新增 10 个自定义角色 【企业版】:无限 【旗舰版】:无限
权限配置说明
第一步:开启权限功能
⚠️ 注意:权限一旦开启,无法关闭,已上线项目谨慎使用! ⚠️ 注意:在没有新增角色前,不要轻易修改【已登录用户】的权限配置,可能会对线上用户产生直接影响
- 在左上角的设置-权限管理, 点击开启权限系统
- 权限开启成功之后会自动创建两个默认角色(不可删除) ,会自动给用户授予/移除,无法手动管理,是一种特殊的角色。>
- 已登录用户:
- 小程序中的已登陆用户概念:在执行了 用户事件 - 获取微信用户昵称/头像 行为之后,往默认的账户表中更新了头像以及昵数据的用户
- Web中的已登陆用户概念:在 Zion 上成功执行 用户事件->用户登录->手机号/邮箱/用户等登录方式 往默认的账户表中插入了用户名、手机号或者邮箱等数据的用户
- 游客:
- 小程序:小程序由于在全局设置中直接默认配置了 静默登陆 行为,所以实际上没有游客的概念,所有进入小程序的用户都是「已登陆用户」
- Web :没有登录直接进入到项目的访客都是「游客」角色
- 自定义角色:高级版以上允许新增自定义角色,可以为该角色配置相关权限
第二步:配置各个角色权限
1. 新增角色
单击【添加】按钮,可以添加新的角色,在未更新权限配置前,可以修改角色的名称,更新权限配置之后只能够复制、删除角色。
2. 配置角色权限/添加角色用户
- 点击「权限管理」下方的选项卡,可以分别设置数据表、API、行为流的操作权限,点击【将该角色赋予用户】可以设置哪些用户拥有该角色权限。
- 点击「用户管理」下方的按钮,可以查看这个角色下的用户有哪些,为这个角色添加/删除用户。
2.1. 配置数据模型权限
- 操作权限:有查询、添加、修改、删除四个操作的配置,只有勾选对应操作,该角色才能对对应的数据表进行操作
- 比如普通用户只能够查看活动表的数据,也就是只能执行查询操作,但他不能添加、修改删除活动表的数据
- 字段权限:当添加了操作权限之后,能够进一步的配置该角色对于这张数据表中某一列(字段)的权限
- 比如个人信息表中有姓名、身份证、手机号等信息,普通用户只能够查询个人信息表中的姓名字段,管理员才能够查看身份证以及手机号的字段数据
- 高级筛选:当打开了某个操作的配置权限,可以进一步对这个操作进行高级筛选配置,即配置这个角色这个操作下的进一步判断条件,只有满足条件才允许执行相关操作,比如用户只能修改自己的个人信息表中的数据
- 进入个人信息表的权限配置界面,在高级筛选的对应列中点击对应列的「配置」
- 例如只允许自己删除自己的个人信息数据,那么在条件设置中配置「当前用户数据ID」等于「当前行数据/accountid账户」
- 可进行高级选筛选的数据源
- 已登录用户: 默认的账户表中的字段
- 当前行数据: 该数据表中的字段
- 常量数据: 时间、日期、时间日期#### 2.2. 配置API、行为流和 Z AI 的操作权限
勾选 API 中的复选框,可以设置该角色能够调用哪些 API
勾选 行为流中的复选框,可以设置该角色能够调用哪些 行为流
勾选 Z AI 中的复选框,可以设置该角色能够调用哪些 Z AI
2.3. 注意事项
- 数据模型的权限配置在行为流里面不生效,只对直接的数据模型增删改查请求有效,API 同理
- 对于已存在角色,项目中新增的API、行为流默认为关闭状态,需要在相应的角色权限处打开并更新才能正常访问
对于已存在的角色,在项目中新增数据表/数据列时,默认为「可公开访问」,即对所有角色都开放权限,可以根据业务需求在创建时关闭「可公开访问」或者到权限配置中修改权限配置> 当用户拥有多个角色:当一个用户拥有多个角色时(A、B、C三个角色),数据模型返回结果先按照包含用户所有请求字段的角色筛选, 再返回所有符合行筛选条件的数据
A: 列1、列2; B:列2、列3; C: 列1、列2、列3; D: 列1、列2、列3、列4;
- 请求 列1、列2、列3 时, 只有C和D符合, 再分别根据C和D的行筛选条件请求汇总返回
第三步:更新配置使其生效
权限配置变更后,系统会自动弹出【更新配置】的提示,点击更新配置让最新的配置生效
在页面配置里使用用户角色作为条件
场景: 在条件式容器、条件行为、条件数据等可以配置条件的地方,根据不同的角色显示不同内容或者执行不同操作
例如: 在条件式容器中分别有「管理员」与「普通用户」的条件式子容器,只有拥有管理员权限的人才可以看到「管理员」的子容器中的内容,那我们可以为「管理员」子容器配置【当前用户数据 - 已登录用户的角色列表】“包含” 【管理员】的条件来实现这个需求
注意事项
角色部分字段权限不足时的情况
- 列表类组件: 列表子容器的组件绑定组件内数据/列表/item/phone_number,对于字段 phone_number, 角色 A 有查看权限, 角色 B 没有查看权限. 被授权角色 A 的用户打开页面, 列表正常返回数据并显示; 被授权角色 B 的用户打开页面, 列表一条数据都不会加载,并且出现 Permission check failed 的错误
- 页面上的远程数据: 组件上绑定[远程数据/name]、[远程数据/description]. 对于字段name, 角色A有查看权限, 角色B没有查看权限, 对于字段description角色A、B都有查看的权限. 被授权角色A的用户打开页面, name和description的数据会显示; 被授权角色B的用户打开页面, name和description的数据都不会显示。即其中任意一个字段没有权限, 同一个请求的所有字段都不会显示,列表有多个字段时,也一样
- 添加/修改/删除行为、API、行为流, 当操作的用户所授权的角色没有权限时, 点击时执行操作会失败, web端无报错提示, 小程序会弹出“security verification failed”提示
修改【已登录用户】的权限时的情况
对于已上线项目,需要把先增加一个角色代替【已登录用户】角色, 以防影响线上用户的部分操作。 操作步骤 ⬇️ - 将【已登录用户】的权限配置复刻到新角色上面;
- 授权新角色给已注册用户(现有的用户);
- 最后修改【已登录用户】的权限
出现 invocation of xxxx is not allowad xxx 报错的情况
出现原因: 后台开启了权限系统,新增的数据表活或字段,API、AI、行为流没有给权限 解决方法: 前往权限配置中为该用户的角色添加对应的操作权限即可