业务功能经验分享,关于后台系统的数据权限的摸索【玩转前端】

举报
叶一一 发表于 2023/07/30 15:39:48 2023/07/30
【摘要】 谈到数据权限,第一时间想到的是通过请求数据增加过滤条件进行数据的筛选,其实前端技术层面也可以做限制的。这也是我在摸索过程中得到的启发。

逃坑威龙:来时无声,去时留踪

最近踩了几个不常见的坑,人虽然没emo,但是填坑那几天的精气神到底是有些不足。

这些天的经历过于丰富,一时间想不到语言去形容。所以我画了幅图,并取了个好听的名字——"逃坑威龙"。

虽然不排除,今后还会经历踩坑、填坑、再入新坑的循环。至少,这个短暂的时期内,我是处于写"万字感言"的阶段。

于是有了前一篇代码设计闭坑思路,也有了今天这篇数据权限的思考。

数据权限:可算是触发隐藏副本了

从权限控制说起吧

最近购物节,张三购买了不少日用品,当他打开自己的订单页面的时候,发现了一条不认识的购买记录,细看是李四的。好家伙,这买的是什么,没想到你是这样的李四。

正常这种情况是不会出现的,因为开发者会做数据权限设计:

用户A只能访问到属于自己拥有的权限下的数据。

虽然看上去只有一句话,很好理解,好像很简单。但是实际情况,系统的权限层级不是单一的,随着层级的增加,不同层级的权限会出现交叉、包含等情况。

举个例子:

A战区业务员新建了几个活动,A战区的其他业务员能看到,而B战区的业务员是无法查看的。但是第一大区的经理是能看到第一大区下的A、B、C三个战区所有的数据的。

使用RBAC模型就可以实现基于角色的访问权限控制。

但是,实际业务场景中,除了角色还有更细小的权限控制,所以常规的权限控制的规则设计无法覆盖全。

隐藏副本:数据导出

做完权限管理,我遇到的第一个隐藏副本(掉坑),就是数据导出。

我们导出的那套系统是公共的,跟权限系统是分开的。

在没有任何特殊处理的情况下,某个角色是可以导出所有角色数据的。

原来不止人类的悲喜,系统也是不相通的。

后来,我在导出操作的方法中加入了当前角色的信息,才做到了数据的隔离。

数据导出的时候,除了需要传入筛选项的值,还需要默认带上用户的信息。

/**
 * 数据导出公共方法
 * @param {Object} 搜索项筛选数据对象
 */
const export = (searchParams) => {
  const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
  let params = {
    ...searchParams,
    ...userInfo.
  }
}

<Button type="primary" onClick={() => util.export({ ...listRef.current.searchParams() })} >
  导出
</Button>

当初就应该多看它几眼。

隐藏副本:不受控的"手动挡"

角色权限控制确实好用,但是也不是"万金油"。这不,我又触发了一次隐藏副本(掉坑)。

接续上面提到的活动的场景

每个战区新增的活动,都可以分配部分优惠券,这个是由大区经理操作的。战区业务员可以看到所在战区的活动绑定的优惠券。

这个功能比较简单,只需要对应的活动ID筛选绑定的优惠券。

然而战区业务员小明将优惠券页面的地址所携带的活动ID删掉之后刷新页面,看到了全部的优惠券数据。

他凌乱了。

我也凌乱了。

总结

谈到数据权限,第一时间想到的是通过请求数据增加过滤条件进行数据的筛选,其实前端技术层面也可以做限制的。

这也是我在摸索过程中得到的启发。


作者:非职业「传道授业解惑」的开发者叶一一
简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。