| package com.matrix.system.common.tag; | 
|   | 
|   | 
| import com.matrix.core.tools.WebUtil; | 
| import com.matrix.system.common.authority.AuthorityManager; | 
| import com.matrix.system.common.authority.DefaultAuthorityManager; | 
| import com.matrix.system.common.constance.AppConstance; | 
| import org.thymeleaf.IEngineConfiguration; | 
| import org.thymeleaf.context.ITemplateContext; | 
| import org.thymeleaf.engine.AttributeName; | 
| import org.thymeleaf.model.IProcessableElementTag; | 
| import org.thymeleaf.processor.element.AbstractAttributeTagProcessor; | 
| import org.thymeleaf.processor.element.IElementTagStructureHandler; | 
| import org.thymeleaf.standard.expression.IStandardExpression; | 
| import org.thymeleaf.standard.expression.IStandardExpressionParser; | 
| import org.thymeleaf.standard.expression.StandardExpressions; | 
| import org.thymeleaf.templatemode.TemplateMode; | 
|   | 
| /** | 
|  * 页面按钮权限类 | 
|  *  | 
|  * @author jiangyouyao | 
|  * @email 512061637@qq.com | 
|  * @date 2019年2月25日 | 
|  */ | 
| public class ButtonRoleFnTagProcessor extends AbstractAttributeTagProcessor { | 
|   | 
|     /** | 
|      * 标签名 | 
|      */ | 
|     private static final String ATTR_NAME = "fn"; | 
|   | 
|     /** | 
|      * 优先级 | 
|      */ | 
|     private static final int PRECEDENCE = 10000; | 
|   | 
|     public ButtonRoleFnTagProcessor(final String dialectPrefix) { | 
|         super( // This processor will apply only to HTML mode | 
|                 TemplateMode.HTML, | 
|                 // Prefix to be applied to name for matching | 
|                 dialectPrefix, | 
|                 // No tag name: match any tag name | 
|                 null, | 
|                 // No prefix to be applied to tag name | 
|                 false, | 
|                 // Name of the attribute that will be matched | 
|                 ATTR_NAME, | 
|                 // Apply dialect prefix to attribute name | 
|                 true, | 
|                 // Precedence (inside dialect's own precedence) | 
|                 PRECEDENCE, | 
|                 // Remove the matched attribute afterwards | 
|                 true); | 
|     } | 
|   | 
|     /** | 
|      * 自定义标签主方法 | 
|      *  | 
|      * @author jiangyouyao | 
|      * @email 512061637@qq.com | 
|      * @date 2019年1月12日 | 
|      * @param context | 
|      * @param tag | 
|      * @param attributeName | 
|      * @param attributeValue | 
|      * @param structureHandler | 
|      */ | 
|     @Override | 
|     protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, | 
|             String attributeValue, IElementTagStructureHandler structureHandler) { | 
|         final IEngineConfiguration configuration = context.getConfiguration(); | 
|   | 
|         // Obtain the Thymeleaf Standard Expression parser | 
|         final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration); | 
|   | 
|         // Parse the attribute value as a Thymeleaf Standard Expression | 
|         final IStandardExpression expression = parser.parseExpression(context, attributeValue); | 
|   | 
|         // 标签的值 功能code-add 这种类型 | 
|         final String attrValue = expression.execute(context).toString(); | 
|   | 
|         // 此时根据当前登录用户判断是否有该权限 | 
|         AuthorityManager authority = (DefaultAuthorityManager) WebUtil.getBean(AppConstance.DEFAULT_AUTHORITYMANAGER); | 
|   | 
|         if (!authority.isFnPermitted(attrValue)) { | 
|             // 如果没有该按钮权限,则直接移除该模块 | 
|             structureHandler.removeElement(); | 
|         } | 
|   | 
|     } | 
|   | 
| } |