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();
|
}
|
|
}
|
|
}
|