数据权限技术调研

本文介绍了数据权限的概念,包括全部、本部门及下属部门、仅本部门、自己发布或参与的和自定义部门等五种权限类型。并详细阐述了如何在Java后端通过AOP+自定义注解实现数据权限,涉及到SQL查询的动态拼接,以及在业务代码中使用自定义注解`@DataScope`的例子。
摘要由CSDN通过智能技术生成

什么是数据权限

数据权限无非就是某人只能看到某些数据,这些数据是可能是属于自己直接操作的,也可能是间接操作的。

    场景1、 业务员A在业务员B某个订单上查看了某某客户对某某产品的销售单价,在某某搜搜框中搜出其他业务员的订单信息,可以随意的查看其他人的订单信息,其他人的业务员客户信息,其他人负责的产品信息,这无疑不是对系统健全的挑战。
   场景2、 某业务主管看到公司某产品的平均毛利率,某客户的平均毛利率,重则带着下面一群小弟出去创业,称为公司的竞争对手,这无疑会对公司造成损失。

某业务员A想知道自己有哪些客户,于是打开了客户管理界面,看到的客户全是自己相关的,假如没有数据权限的设定 ,会看到有部分不属于自己负责客户。如何统计出某业务主管自己部门销售量多的销售呢? ​

有哪些数据权限

数据权限可以为后期操作做出等级的分级。CRM系统中数据权限有五种:

一、全部,当选择全部时,该员工会看到所有的数据信息,多用于超级管理员或总裁级别;

二、本部门及下属部门,该员工会看到本部门的及所有子部门的数据信息,多用于总监级别;

三、仅本部门,该员工只能看到本部门的数据信息,多用于部门经理级别;

四、自己发布或参与的,该员工只能看到和自己有关的数据信息,不会看到别人的数据信息,多用于普通员工;

五、自定义部门,后期该员工可以看到自定义的部门有关的数据信息。

如何实现数据权限

1.数据权限是和角色进行绑定的

对应的页面是:系统管理->权限管理->角色管理

2.后端使用AOP+自定义注解实现数据权限

2.1 利用sql实现数据权限

2.1.1 举例:假如我要查询线索表里的数据

SELECT
    clue.*,
    r.create_by AS assign_by,
    r.user_name AS OWNER,
    r.create_time AS owner_time
FROM
    tb_clue clue
LEFT JOIN tb_assign_record r ON clue.id = r.assign_id
WHERE
    r.latest = '1'
AND r.type = '0'
AND clue. STATUS IN ('1', '2')
ORDER BY
    clue.create_time DESC

2.1.2 全部数据权限的SQL

SELECT
    clue.*,
    r.create_by AS assign_by,
    r.user_name AS OWNER,
    r.create_time AS owner_time
FROM
    tb_clue clue
LEFT JOIN tb_assign_record r ON clue.id = r.assign_id
WHERE
    r.latest = '1'
AND r.type = '0'
AND clue. STATUS IN ('1', '2')
ORDER BY
    clue.create_time DESC

在全部数据权限下,什么都不用修改

2.1.3仅本人数据权限的SQL

SELECT
    clue.*,
    r.create_by AS assign_by,
    r.user_name AS OWNER,
    r.create_time AS owner_time
FROM
    tb_clue clue
LEFT JOIN tb_assign_record r ON clue.id = r.assign_id<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值