美文网首页
权限判断-位运算

权限判断-位运算

作者: 无星灬 | 来源:发表于2018-07-08 22:55 被阅读21次

角色权限判断,这应该是大部分应用都有的功能,那么如何进行权限判断?

这里说下我们用的思路,可能会比较low,各位看官别笑。


打个比方,我现在有A,B,C,D四个功能。要对某个账户是否具有这些功能权限做判断。
我们有个list,里面存放着这个账户所有的权限。(list从哪来?当然是后台请求回来啊!)
A功能对应的权限是=>0,以此类推B=>1,C=>2,D=>3这样子。

那么如果我有一个账号拥有所有权限,list就是【0,1,2,3】,如果没有B权限就是【0,2,3,4】这样子,相信大家都应该明白我要表达的意思了。

那么要判断是否拥有某个权限,这时候肯定就会说,遍历一下list不就知道了?那如果权限比较多呢?而且你不觉得这样更low么=。=
所以这个时候,我们可以使用位运算打成这个目的:

先说我们用来判断的方法:

//判断是否存在权限,permission是所有权限展示中的某个权限,只有一个&,不是两个,别搞错了
    hasPermission(permission) {
        return permission & GlobalValue.authValue
    }

再定义一个包含了所有权限的声明

//所有权限列表展示
export let Permission = {
    A: Math.pow(2, 0),   //A功能
    B: Math.pow(2, 1),   //B功能
    C: Math.pow(2, 2),    //C功能
    D: Math.pow(2, 3),   //D功能
    ...
}

在我们和后台请求拿到某个角色所包含的list的时候,对list做如下操作

      if (authList && authList.length > 0) {
            let authValue = 0
            for (let i = 0; i < authList.length; i++) {
                let index = authList[i]
                let permission = Math.pow(2, index)
                authValue += permission
            }
            return authValue//我在代码里GlobalValue.authValue = authValue存起来了,你们也找个全局的东西存起来就好
        }

P.S.如果看懂了就不用往下看了,不浪费大牛的时间~~

可能各位没看懂老哥会很迷我在干嘛,这一步操作是干什么?别慌,让我们往下看

我们举一个例子来解释这个问题。假设我当前账号只有AC两个功能,那么我拿到的authList是多少呢?很简单:【0,2】

那么根据上面for循环的一顿操作,我这个返回的authValue会是多少呢?

2的0次方+2的2次方=5,这个数学就不多说了。。
那么现在我们可以知道,authValue = 5,
那么假设我现在要判断当前账户是否存在A功能权限:

let isHave =  this. hasPermission(Permission.A)

那么接下来重点来了,这就需要一丢丢离散数学的知识了
其实就是对Permission.A&5这一步进行计算
先转成二进制再进行&运算

            0 0 0 0 1
    &       0 0 1 0 1
————————————————————————————————
            0 0 0 0 1

结果是:2的0次方=1

0代表false,非0代表true
所以答案是,有A权限

那么判断是否有B权限也是一样的,判断Permission.B&5

同样先转成二进制再进行&运算

            0 0 0 1 0
    &       0 0 1 0 1
————————————————————————————————
            0 0 0 0 0

结果是:0

所以答案是,没有B权限

相信讲到这里应该都明白了。如果不明白&的操作,可以百度一下离散数学这个&的操作。其实说简单一点就是1&1=1,0&任何=0(不保证对哈,就理解性的看下这句话,不是严格模式=。=)
所以综上:在做任何权限判断时,都可以使用这种位运算的方式来进行判断。

其他没了emmm

相关文章

  • 权限判断-位运算

    角色权限判断,这应该是大部分应用都有的功能,那么如何进行权限判断? 这里说下我们用的思路,可能会比较low,各位看...

  • 位运算及用位运算实现权限控制

    请自行补习位运算相关知识 位运算 位运算示例 权限控制

  • iOS中使用位运算判断权限

    在iOS的某些权限判断中,使用位运算可以起到很方便快捷的作用,示例代码: 其中[OCTAuthorityManag...

  • JavaScript 中的位运算和权限设计

    1. 内容概要 2. JavaScript 位运算 2.1. Number 2.2. 位运算 3. 位运算在权限系...

  • 1.shell基础

    1.定义变量与取值 运算: 逻辑判断 循环结构: 修改权限

  • shell系列3-运算符

    一. 数值运算符 整数判断: 二. 算数运算符 三. 字符串判断 四. 逻辑运算符 五. 位运算符 位运算符在Sh...

  • 位运算的简单应用-权限管理

    个人博客http://www.milovetingting.cn 位运算的简单应用-权限管理 位运算在实际的开发中...

  • PHP 权限管理 位运算

    最近在搞一个权限管理,就是通过位或运算来验证权限,来分享一下实现原理。 权限管理,核心就是权限分配和权限验证两点。...

  • LeetCode刷题笔记(九)位运算

    九. 位运算 位运算不需要转换成10进制, 因此处理速度非常快。实战常用位运算 x & 1 == 1 判断奇偶 (...

  • ios 9+ 访问权限总结

    1.判断相册权限 2.判断相机权限 3.判断麦克风权限 4.判断通讯录权限 5.判断定位权限 6.判断日历权限 7...

网友评论

      本文标题:权限判断-位运算

      本文链接:https://www.haomeiwen.com/subject/sjsauftx.html