菜单通过权限,自定义标签 封装如何显示

自定义标签

package cn.itcast.crm.tag;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;

import org.apache.commons.lang.StringUtils;

import cn.itcast.crm.container.ServiceProvinder;
import cn.itcast.crm.domain.SysMenuPrivilege;
import cn.itcast.crm.domain.SysUser;
import cn.itcast.crm.service.ISysMenuPrivilegeService;
import cn.itcast.crm.util.SessionUtils;

public class CheckMemuTag implements SimpleTag {

	private PageContext pageContext;
	//标签体
	private JspFragment jspFragment;
	
	//<itcast:checkMemu  module="${sysMenu.id.menuModule}"   privilege="${sysMenu.id.menuPrivilege}">
	private String module;
	private String privilege;

	public void doTag() throws JspException, IOException {
   
		//获取request对象
		HttpServletRequest request=(HttpServletRequest)pageContext.getRequest();
		
		//获取当前登陆用户
		SysUser sysUser=SessionUtils.getSysUserFormSession(request);
		if(sysUser==null){
			return;
		}
		
		if(sysUser.getSysRole()==null){
			return;
		}
		
		//获取当前登陆用户对应的权限组id
		String roleId=sysUser.getSysRole().getId();
		
		//获取菜单操作权限的业务层  sys_menu_privilege
		ISysMenuPrivilegeService sysMenuPrivilegeService=
		    (ISysMenuPrivilegeService)ServiceProvinder.getService(ISysMenuPrivilegeService.SERVICE_NAME);
		
		//获取菜单操作权限表中的所有数据 sys_menu_privilege,返回值List集合
		List<SysMenuPrivilege> list=sysMenuPrivilegeService.findAllSysMenuPrivileges();
		
		//遍历集合
		if(list!=null&&list.size()>0){
			for(int i=0;i<list.size();i++){
				SysMenuPrivilege s=list.get(i);
				if(StringUtils.isNotBlank(roleId)&&StringUtils.isNotBlank(module)&&StringUtils.isNotBlank(privilege)){
				    //比对权限id+模块名称+操作名称
		             if(roleId.equals(s.getId().getRoleId())&&module.equals(s.getId().getMenuModule())
		                &&privilege.equals(s.getId().getMenuPrivilege())){
                          //如果在集合中存在,输出标签体
		                  this.jspFragment.invoke(null);
		                  break;
		               }
				}
			}
		}
		     
		
	}

	public JspTag getParent() {
		return null;
	}

	public void setJspBody(JspFragment jspFragment) {
        this.jspFragment=jspFragment;
	}

	public void setJspContext(JspContext pc) {
        this.pageContext=(PageContext) pc;
	}
	
	public void setParent(JspTag arg0) {
	}
	
	public void setModule(String module) {
		this.module = module;
	}

	public void setPrivilege(String privilege) {
		this.privilege = privilege;
	}
	
}

定义的.tld文件

注意module,privilege是标签属性,<required>true</required>必填,<rtexprvalue>true</rtexprvalue>可以用jsp表达式作值

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
  <description>myitcast 1.o core library</description>
  <display-name>itcast core</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>itcast</short-name>
  <uri>http://www.itcast.cn/jsp/jstl/core</uri>
  <tag>
    <name>checkMemu</name>
    <tag-class>cn.itcast.crm.tag.CheckMemuTag</tag-class>
    <!-- 标签体不能为空 -->
    <body-content>scriptless</body-content>
    <attribute>
        <name>module</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
        <name>privilege</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>


使用标签

导入

<%@ taglib uri="/WEB-INF/tld/myitcast.tld"  prefix="itcast"%>
  <c:forEach items="${applicationScope.sysMenus}" var="sysMenu">
			        <c:if test="${sysMenu.id.menuModule==sysMenu.id.menuPrivilege}">
					   <itcast:checkMemu  module="${sysMenu.id.menuModule}"   privilege="${sysMenu.id.menuPrivilege}">
						    <li><img src="${pageContext.request.contextPath}/ui/images${sysMenu.icon}" width="17" height="17">
						    <strong>${sysMenu.menuName}</strong>
							
						    <c:forEach items="${applicationScope.sysMenus}" var="sysMenuSub">
						      <c:if test="${sysMenuSub.id.menuModule!=sysMenuSub.id.menuPrivilege
						                    &&sysMenu.id.menuModule==sysMenuSub.id.menuModule}">
								 <itcast:checkMemu  module="${sysMenuSub.id.menuModule}"   privilege="${sysMenuSub.id.menuPrivilege}">
									<ul>
										  <li><img src="${pageContext.request.contextPath}/ui/images${sysMenuSub.icon}" width="17" height="17">
										  <a href="${pageContext.request.contextPath}${sysMenuSub.url}"  target="${sysMenuSub.target}">${sysMenuSub.menuName}</a></li>
									</ul>
							     </itcast:checkMemu>
							  </c:if>	
							</c:forEach>
						    </li>
					   </itcast:checkMemu>
				    </c:if>
			    </c:forEach>




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue3 中,你可以通过自定义指令或组件的方式来封装权限菜单权限按钮。 1. 自定义指令 你可以通过自定义指令来实现权限按钮的封装。例如,你可以创建一个名为 `v-permission` 的指令,然后在需要控制权限的按钮上使用该指令。在指令中,你可以通过判断用户是否拥有相应的权限来控制按钮的显示或隐藏。 示例代码: ```vue <template> <button v-permission="'edit'">编辑</button> </template> <script> export default { directives: { permission: { mounted(el, binding) { const permission = binding.value; const hasPermission = checkPermission(permission); if (!hasPermission) { el.style.display = 'none'; } } } } } </script> ``` 2. 组件 你也可以通过组件的方式来封装权限菜单权限按钮。例如,你可以创建一个名为 `PermissionMenu` 的组件,然后在该组件中根据用户是否拥有相应的权限来动态生成菜单。 示例代码: ```vue <template> <ul> <li v-for="item in menu" :key="item.path"> <router-link v-if="hasPermission(item.permission)" :to="item.path">{{ item.title }}</router-link> </li> </ul> </template> <script> export default { data() { return { menu: [ { path: '/', title: '首页', permission: 'home' }, { path: '/user', title: '用户管理', permission: 'user' }, { path: '/role', title: '角色管理', permission: 'role' } ] } }, methods: { hasPermission(permission) { return checkPermission(permission); } } } </script> ``` 无论是自定义指令还是组件,都需要在代码中实现权限的判断逻辑,以保证权限的正确控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值