课程章节介绍
同学们,咱们来看一下LWC里面怎么做权限检查。在Aura框架里,我们习惯在运行时去调用API来查权限,但在LWC里,思路完全不一样了。我们用的是编译时静态导入。这有什么好处呢?简单说,就是在页面加载的时候,权限结果就已经确定了,不需要再发起额外的网络请求,速度更快,也更可靠。
具体怎么做呢?如果你想检查一个标准权限,比如查看账户的权限,你就在组件里这样写:import 一个东西,从 '@salesforce/userPermit/查看账户'。注意,这个路径是固定的模式,你把PermissionName换成你要检查的那个权限的API名称就可以了。
那如果是自定义权限呢?分两种情况。如果这个自定义权限跟你的组件在同一个命名空间里,直接用 '@salesforce/customPermit/权限名称' 就行,不需要加命名空间前缀。但如果这个权限是来自一个托管包,命名空间不一样,这个时候就要在权限名称前面加上命名空间,并且用,双下划线,来分隔。比如,命名空间叫 myNS,权限叫 My_Permission,那你导入的路径就是 '@salesforce/customPermit/myNS__My_Permission'。记住,是双下划线。
导入进来之后,这个导入的值是什么?如果当前用户有权限,它就是 true;如果没有权限,它不是 false,而是 ,undefined,。虽然 undefined 在布尔判断里也是 falsy,和 false 一样会走到不成立的逻辑,但你得清楚它是 undefined,不是 false,这样在调试的时候心里有数。
跟Aura的运行时检查相比,LWC这种静态导入最大的优势就是性能。因为权限结果在编译时就确定了,运行时没有网络开销,也不会因为等待权限检查而闪烁界面。那我们怎么用这个值来控制界面呢?通常在 getter 里面用。比如你定义一个 get 方法,里面返回这个权限变量,然后在模板里用 lwc:if 来决定某块UI显不显示,或者用 disabled 属性来控制按钮能不能点。
如果你去看 Salesforce 官方的 lwc-recipes 仓库,里面有一个示例叫 miscPermissionBasedUI,它完整演示了这些模式。建议大家去拉下来看一看,跟着敲一遍,理解会更透彻。
总的来说,LWC的权限检查,就是静态导入、编译时解析、无网络调用,性能更好,代码也更干净。记住这几点,以后做权限控制就游刃有余了。好,这节课就到这里,有什么问题随时提。
关键词
LWC
Lightning Web Components
Salesforce