wordpress获取自定义字段的值,寻找郑州网站优化公司,如何获得网站域名,wordpress基地基于位的权限系统是一种利用二进制位运算进行权限管理的技术。在这种系统中#xff0c;不同的权限被编码为2的幂次方 (例如1、2、4、8等)#xff0c;每个权限对应一个独立的二进制位#xff08;可想而知运算速度是非常快的#xff09;。通过将这些权限值组合在一起形成一个…基于位的权限系统是一种利用二进制位运算进行权限管理的技术。在这种系统中不同的权限被编码为2的幂次方 (例如1、2、4、8等)每个权限对应一个独立的二进制位可想而知运算速度是非常快的。通过将这些权限值组合在一起形成一个整数比如124可以表示用户所拥有的所有权限集合。 将不同的权限组合成一个整数通过位运算来快速且方便地判断用户是否具有某种或某几种权限。 例如在权限管理中 查看权限对应值为 1、添加权限对应值为 2 修改权限对应值为 4、删除权限对应值为 8 假设有一个用户他拥有查看和修改权限那么他的权限值就是 1 4 5(二进制是 0101)。 验证用户权限时
检查用户是否有查看权限用户权限 1 是否等于 1。检查用户是否有修改权限用户权限 4 是否等于 4。检查用户是否有查看和修改权限: 用户权限 (1|4)是否等于(1 4) 。
如果要赋予用户所有权限则权限值将是 1 2 4 ..直到覆盖所有权限位这样用户的权限值就是一个包含了所有有效权限位均为1的二进制数。 这种二进制算法用于权限管理既高效又节省存储空间非常适合于大型系统的权限控制。
以下是实现代码示例
const PERMISSINOS {VIEW: { value: 1, name: VIEW }, // 权限值为 1名称为 VIEWADD: { value: 2, name: ADD }, // 权限值为 2名称为 ADDEDIT: { value: 4, name: EDIT }, // 权限值为 4名称为 EDITDELETE: { value: 8, name: DELETE } // 权限值为 8名称为 DELETE
};// 获取用户拥有的权限列表
function getPermissions(userPermissions) {const userHasPermissions [];for (let permission in PERMISSINOS) {if (hasPermission(userPermissions, PERMISSINOS[permission].value)) {userHasPermissions.push(PERMISSINOS[permission].name); // 将权限名称添加到数组}}return userHasPermissions;
}// 判断用户是否拥有某个权限
function hasPermission(userPermissions, permission) {return (userPermissions permission) permission; // 进行位运算判断
}let userPermissions 7; // 用户权限值为 7即二进制 0111console.log(getPermissions(userPermissions)); // 返回 [VIEW, ADD, EDIT]即用户拥有 VIEW、ADD、EDIT 三个权限当userPermissions 7; 则返回VIEW ADD EDIT三个权限内容
当userPermissions 5 则返回VIEW EDIT两个权限内容 总结
位的权限系统的优势在于存储效率是极高的需要利用一个数字就能够表示多种权限极大的节省了空间且处理速度是非常快的因为位运算比传统的循环判断要来的快尤其在处理数据时更为的高校大数据。
扩展性也是非常强的添加新的权限只需要选择下一个未使用的2的幂次方即可。并不会影响现有的权限结构。
不足点可读性并不良好对于非程序员或对于未操作不熟悉开发者来说直接查看权限数值可能难以理解这个数值所代表的具体的权限集合。而且如果要去处理非常复杂的权限模型比如层级权限动态权限基于位的权限系统可能不是那么灵活。
对于边界的条件问题也会存在一定障碍如果权限的数量超出了一定的范围例如32位或64位整数所代表的数量那么则需要重新去计算我们的一个数据结构