权限问题:通过角色来分配,普通角色只能查看自己的数据,部门领导可以看自己部门数据,高层可以看整个数据

权限问题:通过角色来分配,普通角色只能查看自己的数据,部门领导可以看自己部门数据,高层可以看整个数据,通过sql来写到数据集来过滤这层关系,这个要怎么写

FineReport Allen 发布于 2023-11-27 14:06
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2023-11-27 14:13(编辑于 2023-11-27 14:14)
最佳回答
0
就TM你叫夏洛啊Lv6中级互助
发布于2023-11-27 14:13

sql里通过$fine_role要区分所属角色的数据,你要有一张角色数据表,什么样的角色看到对应的数据,然后判断$fine_role来控制所查看的数据

最佳回答
0
cheng1217Lv5见习互助
发布于2023-11-27 14:21(编辑于 2023-11-27 14:22)

-- 用户表CREATE TABLE users (    user_id INT PRIMARY KEY,    username VARCHAR(255),    role_id INT,    department_id INT);

-- 角色表CREATE TABLE roles (    role_id INT PRIMARY KEY,    role_name VARCHAR(255) );

-- 数据表CREATE TABLE data (    data_id INT PRIMARY KEY,    data_value VARCHAR(255),    department_id INT);

INSERT INTO roles (role_id, role_name)

VALUES(1, '普通角色'), (2, '部门领导'), (3, '高层');

INSERT INTO users (user_id, username, role_id, department_id)

VALUES(1, '普通用户1', 1, 101), (2, '普通用户2', 1, 102), (3, '部门领导1', 2, 101), (4, '部门领导2', 2, 102), (5, '高层用户', 3, NULL);

INSERT INTO data (data_id, data_value, department_id)

VALUES(1, '数据1', 101), (2, '数据2', 101), (3, '数据3', 102), (4, '数据4', 102), (5, '数据5', NULL);

-- 普通角色只能查看自己的数据

SELECT data_id, data_value FROM data

WHERE department_id = (SELECT department_id FROM users WHERE user_id = 1);

-- 部门领导可以看自己部门数据

SELECT data_id, data_value FROM data

WHERE department_id = (SELECT department_id FROM users WHERE user_id = 3)   OR department_id IS NULL;

-- 高层可以看整个数据

SELECT data_id, data_value FROM data;

最佳回答
0
GGGGGGGGGLv5初级互助
发布于2023-11-27 15:10(编辑于 2023-11-27 17:19)

这需要看数据与人员组织部门表是否有关联关系了,比如说每条数据都有创建人,通过创建人可以查到他的部门组织,这时候就可以在SQL里过滤了

使用参数$fine_role控制,角色有普通角色、部门领导、高层,这时在SQL里的写法如下:

select * from 表名 

where 1=1 

-- 普通角色则用创建人过滤 

${if(find($fine_role,"普通角色")>0, "and 创建人 = '" + $fine_username + "'", "")} 

-- 部门领导则用部门进行过滤 

${if(find($fine_role,"部门领导")>0, "and 部门 = '" + $所属部门 + "'", "")} 

-- 高层则不过滤,即查询所有数据 

${if(find($fine_role,"高层")>0, "", "")} 

-- 如果用户不属于以上三个角色,则无数据 

${if(or(find($fine_role,"普通角色")>0, find($fine_role,"部门领导")>0, $fine_role,"高层")>0), "", "and 1=0")}

上面的写法是在"帆软用户名 = 创建人,且能够通过每条数据的创建人能关联到部门"的前提下,

里面的$所属部门 参数可以先用数据集查出用户所属部门,放在下拉框控件里

  • Allen Allen(提问者) 这三个一起写在数据集 不需要用判断语句来写吗
    2023-11-27 17:04 
  • GGGGGGGGG GGGGGGGGG 回复 Allen(提问者) 已经用参数做过判断了,如果要写在同一个数据集里需要再改改,已更新
    2023-11-27 17:09 
  • GGGGGGGGG GGGGGGGGG 回复 Allen(提问者) 通过用户角色判断,不同的用户角色用不同的sql条件
    2023-11-27 17:11 
  • Allen Allen(提问者) 回复 GGGGGGGGG 好像不行 查不出来。方便加个q
    2023-11-27 17:32 
  • GGGGGGGGG GGGGGGGGG 回复 Allen(提问者) 不是很方便啊
    2023-11-27 17:33 
  • 6关注人数
  • 536浏览人数
  • 最后回答于:2023-11-27 17:19
    请选择关闭问题的原因
    确定 取消
    返回顶部