Java Spring Boot VS .NetCore (一)來一個簡單的 Hello Worldhtml
Java Spring Boot VS .NetCore (二)實現一個過濾器Filter前端
Java Spring Boot VS .NetCore (三)Ioc容器處理java
Java Spring Boot VS .NetCore (四)數據庫操做 Spring Data JPA vs EFCore數據庫
Java Spring Boot VS .NetCore (五)MyBatis vs EFCoreide
Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtmlspa
Java Spring Boot VS .NetCore (七) 配置文件code
Java Spring Boot VS .NetCore (八) Java 註解 vs .NetCore Attributehtm
Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Securityblog
Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor繼承
Java Spring Boot VS .NetCore (十一)自定義標籤 Java Tag Freemarker VS .NetCore Tag TagHelper
這章介紹下 自定義標籤,都知道在處理權限操做的時候,除了後臺代碼中處理,對於界面上沒有權限的人員對於的權限按鈕也不會顯示
這一點不管是Java 仍是.NetCore 也是有不少共同點
首先來配置下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 主要經過繼承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>