多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![noAuth](https://box.kancloud.cn/f32b734923e982ae5961dde2c7a1926c_1338x128.png) ### 分析 >[warning] 这里以[newlearn]模块为案例来分析 > 当我们使用浏览器访问[https://localhost:8080/newlearn](https://localhost:8080/newlearn)网址的时候, > 出现如标题所示的错误(不允许你浏览这个页面)时, 说明正在用于登录的账户是有效的. > 那么, 这个错误出现的原因是什么呢? > 我们知道OFBiz是一个100%开源项目的综合体, 也就意味着这个错误的提示内容一定在项目源码里, 所以先简单搜索一下这个错误提示的内容. > 我们选中[newlearn]模块的根目录进行搜索. > 搜索结果显示在[OFBIZ_HOME/specialpurpose/newlearn/config/NewLearnUiLabels.xml]文件中有如下代码段 > ~~~ > <property key="NewLearnViewPermissionError"> > <value xml:lang="en"\>You are not allowed to view this page.</value> > <value xml:lang="zh">不允许你浏览这个页面。</value> > <value xml:lang="zh-TW">不允許您檢視這個頁面.</value> > </property> > ~~~ > 我们看到[NewLearnViewPermissionError]属性的中文释义中有我们要找的话, > 我们继续找哪里用到了[NewLearnViewPermissionError]这个属性, 搜索当前模块, > 在[OFBIZ_HOME/specialpurpose/newlearn/widget/CommonScreens.xml]文件中有如下代码段 > ~~~ > <condition> > <if-has-permission permission="NEWLEARN" action="_VIEW"/> > </condition> > <widgets> > <decorator-section-include name="body"/> > </widgets> > <fail-widgets> > <label style="h3">${uiLabelMap.NewLearnViewPermissionError}</label> > </fail-widgets> > ~~~ > 在这段代码中我们看到几个特殊标签: > - if-has-permission: 检查当前登录用户是否有[NEWLEARN_VIEW]权限. > - condition: 条件, 此标签体内标签解释执行结果是[true]时, 标签解释器将跳入[widgets]标签体内执行, 结果是[false]时, 标签解释器将跳入[fail-widgets]标签体内执行 > - widgets: 默认装饰器标签, 页面自然解释时, 页面解释器将解释此标签体内标签进行网页渲染 > - fail-widgets: 当[condition]标签体内标签解释执行结果是[false]时, 此标签体内的标签才开始被解释执行 > 通过对上述代码的的解读, 我们知道, 若当前登录用户有[NEWLEARN_VIEW]权限, 将返回正常的模块内网页, 否则返回一句错误提示, 内容就是我们看到的(不允许你浏览这个页面). > 结论是: 若想当前登录用户能正常访问当前模块, 需要有[NEWLEARN_VIEW]权限. > 那么, 我们根据[怎么确认一个用户是否配置并授予了某个权限](怎么确认一个用户是否配置并授予了某个权限.md)来确认用户的权限. > ### 解决 > 最终我们找到了原因: > 因为数据库并没有用户访问[newlearn]的任何权限配置, 而模块[data]目录下却有这个配置数据, 所以我们需要将数据手工导入到数据库. > 这里, 我们按[OFBiz中怎么手工导入Data.xml数据](OFBiz中怎么手工导入Data.xml数据.md)操作, 导入权限数据. > 再次访问[newlearn]模块, 此时会发现我们能登录并访问成功了.