这章介绍下 自定义标签,都知道在处理权限操作的时候,除了后台代码中处理,对于界面上没有权限的人员对于的权限按钮也不会显示
这一点无论是Java 还是.NetCore 也是有很多共同点
Java Freemarker 处理
首先来配置下Freemarker的代码,来设置按钮的显示 隐藏
@Configuration public class FreeMarkerConfig { @Autowired private freemarker.template.Configuration configuration; @PostConstruct public void setSharedVariable() { try { configuration.setSharedVariable("freemark", new MyTags()); } catch (Exception e) { e.printStackTrace(); } } }
下面看下MyTags是什么?
public class MyTags extends SimpleHash { public MyTags() { put("hasRole", new RoleTag()); } }
自定义的Tag标签需要继承 SecureTag 这个基类,然后在渲染方法 render处理下就ok
public abstract void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException;
对渲染方法重写实现,实现里面可以根据业务处理了,这里需要,下面结合Shiro来处理下
public abstract class RoleTag extends SecureTag { String getName(Map params) { return getParam(params, "name"); } @Override public void render(Environment env, Map params, TemplateDirectiveBody body) throws IOException, TemplateException { boolean show = showTagBody(getName(params)); if (show) { renderBody(env, body); } } protected abstract boolean showTagBody(String roleName); }
下面看看模版中怎么来使用 这里以某人具有某个功能点的权限
<@freemark.hasPermission name="system:role:add"> <button class="btn btn-success " type="button" onclick="add();"><i class="fa fa-plus"></i> 添加</button> </@freemark.hasPermission>
其实就这个流程,那么.NetCore中怎么来自定义标签呢?
.NetCore 自定义标签
.NetCore 主要通过继承TagHelper 类来实现自定标签,但是需要以TagHelper标志性结尾,这里跟java类似
public class UosoPagerTagHelper : TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { } }
淡然这里可以注入(DI)上先关的服务 处理权限,这里可以不必像java在前端判断显示按钮,这里可以直接根据业务按需要处理渲染的必要性
那么在前端界面上我们怎么处理呢?
首先需要添加控件引用,可以通过 ViewImports 页面中添加
@addTagHelper ExpressUser.Extensions.UosoPagerTagHelper, ExpressUser
然后就可以直接在界面上敲出来相关自定义的控件了,也是非常简单的~
<uoso-pager></uoso-pager
来源:oschina
链接:https://my.oschina.net/berzhuan/blog/4299344