基于位运算的JavaScript简单权限系统实现

作者:函数茶馆

时间:2026-10-31

浏览:175

本文介绍使用JavaScript通过位运算实现简单的权限管理系统。通过定义Read、Write、Delete三种权限对应的位值,利用按位与和按位或操作进行权限的获取与设置。代码展示了如何封装权限对象,并提供Java风格的调用示例,适用于需要轻量级权限控制的场景。

文章目录

作者: slightboy, 时间: 2006-10-17


本文为 JavaScript 实现版本,此前文章已阐述相关原理,此处不再赘述。


如需了解具体原理,请参阅 VBS 版本。


权限类型定义与核心逻辑

var PermissionType =


{

Read : 1,


Write : 2,


Delete : 4


}

function PermissionSetComponent(value)


{

this.Value = value;


this.getRead = function()


    {

return this.getValue(PermissionType.Read);


    }

this.setRead = function(value)


    {

this.setValue(PermissionType.Read, value);


    }

this.Read = function()


    {

if (arguments.length > 0)


this.setValue(PermissionType.Read, arguments[0]);


else


return this.getValue(PermissionType.Read);


    }

this.Write = function()


    {

if (arguments.length > 0)


this.setValue(PermissionType.Write, arguments[0]);


else


return this.getValue(PermissionType.Write);


    }

this.Delete = function()


    {

if (arguments.length > 0)


this.setValue(PermissionType.Delete, arguments[0]);


else


return this.getValue(PermissionType.Delete);


    }

this.getValue = function(permissionType)


    {

return (this.Value & permissionType) == permissionType;


    }

this.setValue = function(permissionType, value)


    {

if (value)


this.Value |= permissionType;


else


this.Value &= ~permissionType;


    }
}

权限测试与输出示例

var PermissionSet = new PermissionSetComponent(0);


w("Read:");


PermissionSet.Read(false);


w(PermissionSet.Value +" "+ PermissionSet.Read());


PermissionSet.Read(true);


w(PermissionSet.Value +" "+ PermissionSet.Read());


w("Write:");


PermissionSet.Write(false);


w(PermissionSet.Value +" "+ PermissionSet.Write());


PermissionSet.Write(true);


w(PermissionSet.Value +" "+ PermissionSet.Write());


w("Delete:");


PermissionSet.Delete(false);


w(PermissionSet.Value +" "+ PermissionSet.Delete());


PermissionSet.Delete(true);


w(PermissionSet.Value +" "+ PermissionSet.Delete());


function w(o)


{

Response.Write(o +"<br />");


}

注: 红色部分为 java 风格写法 不是本例所必须.


只是做一个展示, 如果你比较喜欢 java 风格也可以选择这种写法.


实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章