首页 > 其他分享 >前端二进制取值法之权限判断

前端二进制取值法之权限判断

时间:2024-06-17 09:03:40浏览次数:20  
标签:permission 二进制 Permission number userPermission 操作 权限 取值

定义的是一个工具类,类名为CommonUtility,里面有一个名为isConfigurable的静态方法。该方法有两个参数,字段field和掩码writeMask,它们都是数字。

此外,代码段还定义了一个名为WriteMask的常量对象,它映射了一些特定字段和它们在二进制层面上对应的值。

isConfigurable函数通过位运算(与操作)来判断某个给定的字段是否是可配置的。如果字段(field)和掩码(WriteMask某一项的值)进行与操作后结果不为0,说明该字段对应的位在掩码中为1,因此返回true,说明该字段是可配置的;若结果为0,说明该字段对应的位在掩码中为0,则返回false,说明该字段不可配置。

以下是怎么使用这个工具类和WriteMask常量的一个示例:

import { CommonUtility, WriteMask } from './path-to-your-file';

let field = WriteMask.BrowseName; // 写掩码的BrowseName条目对应的数字为4
let writeMask = 5; // 假设写掩码值为5,对应二进制为0101

// 使用工具类方法判断该field是否可配置
let isBrowseNameConfigurable = CommonUtility.isConfigurable(field, writeMask);

console.log(isBrowseNameConfigurable); // 输出true,表示BrowseName是可配置的

在这个例子中,field对应的值是WriteMask中BrowseName的值,只有BrowseName字段和当前的掩码writeMask进行与操作的结果不为0时,BrowseName才被视为可配置的。

和代码相关的注释可能是这样的:

// 写掩码:用于表示哪些属性可配置
export const WriteMask = { 
    // 具体的各属性,数值即二进制中的位置,如Displayname为2^6,对应编码的第七位
    None                    : 0, 
    AccessLevel             : 1, 
    BrowseName              : 4,
    // 省略其余属性
} 

// 工具类
export class CommonUtility 
{ 
    // 判断某一属性是否可配置
    // field:属性的值,取自WriteMask中的某一项
    // writeMask:写掩码,一个编码的数字,用二进制表示时,每一位为1则代表对应属性可配置。
    public static isConfigurable(field : number, writeMask: number) : boolean 
    { 
        return (field & writeMask) == 0 ? false : true; // 通过位运算判断属性是否可配置
    }
}

其他使用场景:

这个例子使用位掩码来表示不同的权限,通过位运算来检查、设置或清除权限。

// 权限掩码:用于表示哪些操作是被允许的

export const Permission = { 
    READ                    : 1 << 0, 
    WRITE                   : 1 << 1, 
    EXECUTE                 : 1 << 2,
    DELETE                  : 1 << 3,
    CREATE                  : 1 << 4 
} 

// 权限工具类
export class PermissionUtility 
{ 
    // 检查某一操作是否被允许
    // permission: 操作的权限值,取自Permission中的某一项
    // userPermission: 用户的权限,一个涵盖多个操作权限的数字,用二进制表示时,每一位为1则代表对应的操作被允许
    public static isAllowed(permission : number, userPermission: number) : boolean 
    { 
        return (permission & userPermission) == permission; 
    }  

    // 添加某一操作的权限
    // permission: 操作的权限值,取自Permission中的某一项
    // userPermission: 用户的权限
    public static addPermission(permission : number, userPermission: number): number
    {
        return userPermission | permission;
    }

    // 移除某一操作的权限
    // permission: 操作的权限值,取自Permission中的某一项
    // userPermission: 用户的权限
    public static removePermission(permission : number, userPermission: number): number
    {
        return userPermission & (~permission);
    }
}

// 怎么使用这个工具类和Permission常量
import { PermissionUtility, Permission } from './path-to-your-file';

// 检查用户是否拥有读权限
let userPermission = 5; // 假设用户权限值为5,对应二进制为0101,表示当前用户拥有READ和EXECUTE权限
let isReadAllowed = PermissionUtility.isAllowed(Permission.READ, userPermission);
console.log(isReadAllowed); // 输出true,表示READ操作是被允许的

// 添加WRITE权限
userPermission = PermissionUtility.addPermission(Permission.WRITE, userPermission);
console.log(userPermission); // 输出7,表示READ, WRITE, EXECUTE权限都拥有

// 移除EXECUTE权限
userPermission = PermissionUtility.removePermission(Permission.EXECUTE, userPermission);
console.log(userPermission); // 输出5,表示READ, WRITE权限被拥有,EXECUTE权限被移除

// 权限掩码:用于表示哪些操作是被允许的

export const Permission = { 
    // 具体的各操作,数值是2的n次方,即二进制中的位置
    // READ为2^0,对应编码的第一位
    // WRITE为2^1,对应编码的第二位
    // 其他操作类似
    READ                    : 1 << 0, 
    WRITE                   : 1 << 1, 
    // 省略其余操作权限
} 

// 权限工具类
export class PermissionUtility 
{ 
    // 判断某一操作是否被允许
    // permission:操作的权限值,取自Permission中的某一项
    // userPermission:用户的权限,一个涵盖多个操作权限的数字,用二进制表示时,每一位为1则代表对应的操作被允许
    public static isAllowed(permission : number, userPermission: number) : boolean 
    { 
        // 通过位运算判断操作是否被允许
        return (permission & userPermission) == permission; 
    }  

    // 添加某一操作的权限
    // permission:操作的权限值,取自Permission中的某一项
    // userPermission:用户的权限
    public static addPermission(permission : number, userPermission: number): number
    {
        // 通过位运算添加操作权限
        return userPermission | permission;
    }

    // 移除某一操作的权限
    // permission:操作的权限值,取自Permission中的某一项
    // userPermission:用户的权限
    public static removePermission(permission : number, userPermission: number): number
    {
        // 通过位运算移除操作权限
        return userPermission & (~permission);
    }
}

这是一个使用二进制位表示不同权限的常量对象。该对象包含了一些表示操作权限的属性,像READ或WRITE,它们的值是2的n次方。这是一种在程序设计中常用的方式,利用二进制位来进行各种标识的设置和判断。

在这里,每一种权限都被赋予一个独立的位(也就是2的n次方,其中n为整数):

  1. READ权限对应于2^0(即值为1),代表二进制数的第一位。
  2. WRITE权限对应于2^1(即值为2),代表二进制数的第二位。

这样设计的好处是:

  1. 使用位操作,可以一次性对多个操作权限进行检查和设置。
  2. 通过为每个操作分配一个独立的位,可以确保每个位都是独立的,互不干扰。

例如,假设我们有一个用户权限数字是5(二进制表示:0101),它是由READ(1)和DELETE(4)两个权限的和构成的,我们可以通过这个数字中的每一位来判断用户是否有READ, WRITE, EXECUTE等操作的权限。具体的,如果执行5 & 1(即READ对应的值),结果是1,说明用户具备READ权限;如果执行5 & 2(即WRITE对应的值),结果是0,说明用户不具备WRITE权限。

注意,这只是Permission对象的部分内容,实际中可能还包括其它操作权限。

每一位可以代表一种权限,例如22(即值为4)可以代表DELETE权限,23(即值为8)可以代表CREATE权限,以此类推。

以上就是文章全部内容了,如果喜欢这篇文章的话,还希望三连支持一下,感谢!

标签:permission,二进制,Permission,number,userPermission,操作,权限,取值
From: https://blog.csdn.net/weixin_43891869/article/details/139668994

相关文章

  • Linux 文件的权限信息解读 chmod修改权限 数字序号表示权限
    ls-l#列出当前文件显示详细信息drwxr-xr-x.2dpctest6Jun1507:45test.txt共分为三部分drwxr-xr-x.:表示文件和文件夹的权限信息dpc:文件,文件夹所属的用户test:文件和文件夹所属的用户组drwxr-xr-x解读d表示为文件夹rwx表示dpc的权限r-x所属用户组......
  • linux的权限管理
    linux的权限管理1.权限介绍和示例root用户权限最高,所以一般对它不做什么权限设置。其他用户就要设定权限并且遵守权限了。文件权限:#文件属性[root@localhost~]#touch1.txt[root@localhost~]#ls-l总用量4-rw-r--r--.1rootroot06月1519:091.txt-r......
  • 数字电路中二进制的数据表达
    文章目录1. 二进制数据表达1.1 二进制简介1.2 用二进制表达文字1.2.1最开始的表达方式1.2.2 通讯系统的编码和解码1.2.3 集成电路1.2.4 ASCII编码1.2.5 GBK编码1.2.6 Unicode编码2. 用二进制表达图像2.1 图片像素化2.2像素数字化2.3 二值图像2.4 ......
  • 成为MySQL DBA后,再看ORACLE数据库(九、用户与权限)
    数据库的用户和权限的管理是DBA日常运维工作中的重要组成部分,不同数据库的用户权限体系及管理方式也会有差别,本文将对ORACLE的用户权限体系和常用操作进行一个总结。一、用户管理ORACLE中创建用户语句和mysql一样,不同的是mysql可以在用户后面加ip以实现ip层面的访问控制。在ORAC......
  • Java IO流(二进制IO流、文本IO流)
    JavaIO流(Input/OutputStream)是Java中用于处理输入输出操作的一种机制。IO流可以从不同的数据源读取数据,或者将数据写入到不同的目标。根据处理的数据类型,IO流可以分为二进制IO流和文本IO流。一、二进制IO流: 二进制IO流主要用于处理非文本数据,如图片、音频、视频等。在J......
  • Ubuntu的文件权限介绍
    Linux系统是一个多用户系统,每个用户都会创建自己的文件。为了防止其他人擅自改动他人的文件,需要拥有一套完善的文件保护机制。在Linux系统中,这种保护机制就是文件的访问权限。文件的访问权限决定了谁可以访问和如何访问特定的文件。为了便于读者理解后面的内容,下面首先介绍一......
  • linux用户及用户组管理,目录或文件权限管理
            在Linux系统中,用户及用户组管理以及目录或文件权限管理是非常重要的系统管理任务。正确管理用户和用户组可以确保系统安全性和数据完整性,而正确设置文件和目录权限可以控制用户对系统资源的访问权限。1.用户及用户组管理对用户进行管理,首先要了解相关的指令......
  • 二进制翻转、结构体指针
    试写一个函数,传入一个参数unsignedcharnum,把num按位进行整个数值翻转。规则:使用位运算,不能另外使用变量存储,写出最优的方案。例:num二进制为10010111;翻转后num二进制是11101001unsignedcharreverseBitsChar(unsignedcharch){    ch=(ch&0x55)<<1|(ch>>1)......
  • Linux结业测试题,旨在检测ip网络配置,文件权限等基础
    Linux期末结业考试一、评分方式(总分100分,理论40分在职教云考试)主要涉及的知识和技能点*分值权重*Linux的最小安装10%激活网络,并正确设置ip地址10%克隆1台机器,并正确设置ip地址10%SSH免密互信服务10%文件和目录操作10%权限操作10%二、项目步骤及实现linux虚拟机安装(1)通......
  • linux用户及用户组管理,目录或文件权限管理
    在Linux系统中,用户及用户组管理,以及目录或文件权限管理是系统管理员的基本任务。以下是一些基本和常用的操作指南。一、用户和用户组管理添加用户1.添加用户sudoadduserusername这条命令会创建一个新的用户,并为该用户创建一个主目录,并提示你设置密码及其他信息。2.为......