oracle权限管理应用,判断A字段中是否包含B字段的值

应用场景:

做项目时遇到一个需求,在向数据库中插入数据时,根据插入者角色的不同(项目中把登陆系统的人分成多个角色),不同角色的用户插入的数据只有固定角色的用户可以查看,例如:角色为1的用户插入的数据只有角色为1和3和4的用户可以查看,角色为2的用户插入的数据只有角色为1和2的用户可以查看。

解决过程:

在表中添加 showscope 字段,用于存放可查看该数据的人员的角色信息,一开始的想法是在插入数据的同时向该字段插入用逗号间隔的数字来存储查看角色的信息,like:'1,2,3'代表只有角色为1或者2或者3的用户可见,但这样的问题就是在检索出数据的时候非常不方便,因为oracle没有类似mysql中查询包含位置的 FIND_IN_SET 的函数,无法直接的通过一条简单的语句查询出传入的用户角色是否在该字段中,网上搜索的结果都是写存储过程,杀鸡焉用牛刀,这么简单的需求何必这么复杂。

解决方法:

使用两个质数的乘积只能被这两个质数,1和该乘积本身整除的特点来判断角色权限

通过把用户角色由原来的:1,2,3,4......改成使用质数:3,5,7,11......

在表中插入showscope的字段改为改信息可见用户的角色的乘积,即:

该数据如果为角色3和角色5的人可以查看的话,那么showscope字段插入的值为15(3*5)

在查询时通过where条件 showscope是否能被角色整除来判断该角色是否可以查看到该条数据。

select * from 表 where mod(showscope,to_number(?))=0 

 showscope为可查看该数据的用户号的乘积,?为传进来的用户角色值

eg:

showscope为15,即为用户角色为3和5的人可以访问
select * fromwhere mod(showscope,to_number(‘3’))=0 

因为15可以被3整除,所以where后的条件是成立的,如果角色为7,那么由于15不能被7整除,所以角色为7的人就查询不到这条数据。

简单,粗暴

 

转载于:https://www.cnblogs.com/fengzhilingwu/p/5713618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值