行级安全策略的继承与多层组织架构权限控制
设计一套支持多级部门的数据权限模型,利用RLS策略的继承特性和current_setting实现动态上下文权限。 · 难度:入门 · +10XP
RLS进阶:组织架构权限树
本教程实现三层权限:员工只能看自己数据,主管看本部门,经理看所有下属部门。利用CREATE POLICY的USING表达式结合递归CTE查询部门树。关键点:使用app.user_role自定义GUC参数传递用户角色,通过pg_has_role检查角色继承。演示如何防止RLS被超级用户绕过(需设置force_parallel_mode)。
CREATE POLICY dept_access ON employee_records FOR ALL TO PUBLIC USING (
emp_dept IN (
WITH RECURSIVE dept_tree AS (
SELECT dept_id FROM departments WHERE manager = current_setting('app.user_id')::int
UNION ALL
SELECT d.dept_id FROM departments d JOIN dept_tree dt ON d.parent_dept = dt.dept_id
)
SELECT dept_id FROM dept_tree
)
);