业务鉴权是系统安全的重要防线,核心目标是判断当前操作主体是否具备执行对应操作的权限。关系运算符用于比较两个值的大小关系或相等性,if条件分支则根据判断结果执行不同的代码逻辑,二者结合可以覆盖绝大多数业务场景的鉴权需求。

基础概念说明
关系运算符
关系运算符用于比较两个操作数,返回布尔值true或false,常见的关系运算符如下:
==:等于,判断两个值是否相等!=:不等于,判断两个值是否不相等>:大于,判断左侧值是否大于右侧值<:小于,判断左侧值是否小于右侧值>=:大于等于,判断左侧值是否大于或等于右侧值<=:小于等于,判断左侧值是否小于或等于右侧值
if条件分支结构
if条件分支根据判断结果执行不同代码块,常见结构有三种:
- 单分支:仅当条件为
true时执行代码块 - 双分支:条件为
true执行一个代码块,为false执行另一个代码块 - 多分支与嵌套:通过
else if处理多个条件,或通过嵌套if处理层级判断
简单鉴权场景实现
以用户登录状态校验为例,判断用户是否已登录,未登录则禁止访问:
// 假设当前用户登录状态,true为已登录,false为未登录
let isLogin = false;
// 待访问的页面路径
let targetPath = "/user/profile";
if (isLogin == false) {
console.log("用户未登录,禁止访问" + targetPath);
// 实际业务中可跳转到登录页
} else {
console.log("用户已登录,允许访问" + targetPath);
}
复杂多维度鉴权逻辑构建
实际业务中的鉴权往往需要同时校验多个维度,比如用户角色、操作权限等级、资源归属等,此时需要结合多个关系运算符和嵌套if分支实现。
案例:文章操作权限校验
需求如下:
- 游客只能查看文章
- 普通用户可查看、评论自己的文章,不能操作他人文章
- 管理员可查看、评论、编辑、删除所有文章
实现代码如下:
// 用户角色:0-游客,1-普通用户,2-管理员
let userRole = 1;
// 用户ID
let userId = 1001;
// 文章作者ID
let articleAuthorId = 1001;
// 操作类型:view-查看,comment-评论,edit-编辑,delete-删除
let operateType = "edit";
if (userRole == 0) {
// 游客逻辑
if (operateType == "view") {
console.log("游客允许查看文章");
} else {
console.log("游客无权限执行" + operateType + "操作");
}
} else if (userRole == 1) {
// 普通用户逻辑
if (operateType == "view") {
console.log("普通用户允许查看文章");
} else if (operateType == "comment") {
// 评论需要判断是否是自己的文章
if (userId == articleAuthorId) {
console.log("普通用户允许评论自己的文章");
} else {
console.log("普通用户不能评论他人文章");
}
} else {
console.log("普通用户无权限执行" + operateType + "操作");
}
} else if (userRole == 2) {
// 管理员逻辑
if (operateType == "view" || operateType == "comment" || operateType == "edit" || operateType == "delete") {
console.log("管理员允许执行" + operateType + "操作");
} else {
console.log("无效的操作类型");
}
} else {
console.log("无效的用户角色");
}
常见错误与优化建议
构建复杂鉴权逻辑时容易出现以下问题:
- 条件判断顺序错误:应该把优先级高的条件放在前面,比如先判断是否为管理员,再判断普通用户权限
- 关系运算符使用不当:比如用
=代替==导致赋值操作,引发逻辑错误 - 嵌套层级过深:超过3层的嵌套会让代码可读性下降,可通过提前返回的方式优化
以上面的案例为例,优化后的普通用户评论判断逻辑如下:
// 普通用户评论权限优化,提前返回减少嵌套
if (userRole == 1 && operateType == "comment") {
if (userId != articleAuthorId) {
console.log("普通用户不能评论他人文章");
return;
}
console.log("普通用户允许评论自己的文章");
return;
}
总结
关系运算符提供了基础的条件判断能力,if条件分支则实现了不同场景的逻辑分流,二者结合可以灵活构建从简单到复杂的各类业务鉴权逻辑。开发时需要注意条件的优先级、运算符的正确使用,同时通过合理的代码结构降低嵌套层级,提升鉴权逻辑的可维护性和准确性,避免权限漏洞的产生。