Skip to content

权限与 SQL 白名单 ​

有两层,管的事情不一样。

能不能打开这个菜单,由角色和菜单决定。打不开页面,就走不进下面这一层。

打开之后能看哪些列、改哪些字段、点哪些按钮,由页内三张权限表决定。同一页上,不同角色可以不一样。

SQL 白名单 ​

打开内置页时,后端扫描页面 JSON,把出现过的 sql_id 放进会话,键是 page:{页面 id}。之后每次 /sql/run 带 X-Page-Id,不在名单里就拒绝。

扩展页读 index.json 的 sql_ids,键是 ext:{html 路径}。请求要带 X-User-Ext-Entry。必须先打开那个 HTML,直接调接口会被拒绝。

弹窗子页要同时满足两点:父页 JSON 的 SubPages 里有它的 id,打开时带 from_page。否则子页自己的 SQL 全部 403。

开发角色(role_id 为 3)可以用 X-User-Id 模拟别人,也可以绕过 SQL 白名单。用开发账号看到的结果,不能当成普通用户的结果。

页内三张表 ​

表管什么能控制的属性
sys.page_column_auth表格列visible、allowEditing
sys.page_form_field_auth表单字段visible、allowEditing、readOnly
sys.page_action_auth按钮可见、可用

每张表有一张角色对照表,val 只有两种:1 明确允许,-1 明确禁止。没有行,就继承该规则的 base_value。

page_id 是被配置的那一页业务页,不是配置页自己的 id。

按钮名用现在的大写名字,例如 Save、AddRow、MainSelect。页面 JSON 里写了 "js:" 的权限表达式,由页面自己算,配置页不参与。

列如果 visible: false 但权限或表达式还要用它的值,列上必须写 KeepData: true。见 页面 JSON。

这里写平台本身。某一家客户的业务表不在这份文档里。