oracle中字段中不含a,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 * from 表 where mod(showscope,to_number(‘3’))=0

因為15可以被3整除,所以where后的條件是成立的,如果角色為7,那么由於15不能被7整除,所以角色為7的人就查詢不到這條數據。

簡單,粗暴

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值