Oracle Apex:如何基于职责(Responsibility)限制网格数据范围
需求实现方案
需求背景
现有系统存在以下基础数据与需求:
- 职责(权限角色)表
Responsibilities,数据如下:
Resp_id | Name --------|------------------- 1 | RESP_ACCOUNT_DEPT_1 2 | RESP_ACCOUNT_DEPT_2 3 | RESP_ACCOUNT_DEPT_3
- 账户-职责关联表
dept_account_resps,查询语句及对应数据:
SELECT dept_name, account_name, resps FROM dept_account_resps;
返回结果:
DEPT_NAME | ACCOUNT_NAME | RESPS ----------|--------------|------------------- 1 | ACC_DEP_1 | RESP_ACCOUNT_DEPT_1 2 | ACC_DEP_2 | RESP_ACCOUNT_DEPT_2 3 | ACC_DEP_3 | RESP_ACCOUNT_DEPT_1 4 | ACC_DEP_4 | RESP_ACCOUNT_DEPT_2
需开发新页面,根据当前登录用户(APP_USER)的职责展示对应权限的账户,例如用户拥有RESP_ACCOUNT_DEPT_1职责时,仅显示ACC_DEP_1、ACC_DEP_3。
实现步骤
1. 获取当前用户的职责列表
从系统的用户-职责关联表(假设表名为user_responsibilities,字段包含user_id、resp_name)中,查询当前登录用户的所有职责。示例SQL:
SELECT resp_name FROM user_responsibilities WHERE user_id = '当前登录用户ID';
后端可通过会话获取用户ID后执行该查询,得到用户的职责集合。
2. 关联筛选有权限的账户
用用户的职责列表作为条件,关联dept_account_resps表筛选出对应账户。示例SQL:
SELECT DISTINCT account_name FROM dept_account_resps WHERE resps IN ( -- 此处代入步骤1获取的用户职责列表,例如'RESP_ACCOUNT_DEPT_1' );
注意使用预编译语句传递职责参数,避免SQL注入风险。
3. 页面渲染与权限控制
- 后端将筛选后的账户列表传递给前端页面,前端仅渲染该列表内的账户数据。
- 核心权限控制必须在后端完成,禁止仅依赖前端隐藏内容(防止用户通过接口直接获取无权限数据)。
4. 关键注意事项
- 避免硬编码职责名称,尽量通过数据库或配置动态获取,方便后续权限扩展。
- 所有数据查询必须经过职责过滤,确保无权限数据不会被返回。
内容的提问来源于stack exchange,提问作者Velocity
相关产品推荐
相关产品推荐

