以前使用php渲染模板的时候,总是习惯用php的去屏蔽掉一些不想让无权限用户查看到的代码,避免用户进行恶意攻击尝试。
在使用Java后,也希望在js模块中加入此类功能,一番google后未能找到想要的结果,类似的博文都是在js中进行权限复制,然后利用js判断绕过逻辑执行,这并不是我想要的。
在查看官方文档之后,我也尝试成功了一种方法,再次记录一下。
框架:springboot+thymeleaf+shiro
- 在控制器中查询用户所拥有的权限(permission),并作为参数传入到thymeleaf
@RequestMapping("index")
public String pageIndex(Model model) {
AuthorizationInfo authorizationInfo = shiroRealm.doGetAuthorizationInfo(null);
model.addAttribute("permissions", authorizationInfo.getStringPermissions());
return "index";
}
- 页面端,js部分
<!-- 这里以渲染echarts为例 -->
<div shiro:haspermission="charts:show" id="echarts"></div>
<script th:inline="javascript" type="text/javascript">
// 根据用户权限选择是否渲染这部分代码
[# th:if="${#strings.contains(permissions, 'charts:show')}"]
var charts = echarts.init($("#echarts").get(0))
charts.setOption(getOption());
function getOption(){
...
}
[/]
</script>