RuoYi 权限验证服务:使用 Thymeleaf 实现按钮权限控制
///'package com.ruoyi.framework.web.service;//n//nimport java.beans.BeanInfo;//nimport java.beans.Introspector;//nimport java.beans.PropertyDescriptor;//nimport org.apache.shiro.SecurityUtils;//nimport org.apache.shiro.subject.Subject;//nimport org.slf4j.Logger;//nimport org.slf4j.LoggerFactory;//nimport org.springframework.stereotype.Service;//nimport com.ruoyi.common.utils.StringUtils;//n//n///n * RuoYi首创 js调用 thymeleaf 实现按钮权限可见性//n * //n * @author ruoyi//n ///n@Service///'permission///'//npublic class PermissionService//n{//n private static final Logger log = LoggerFactory.getLogger(PermissionService.class);//n//n / 没有权限,hidden用于前端隐藏按钮 *///n public static final String NOACCESS = ///'hidden///';//n//n private static final String ROLE_DELIMETER = ///',///';//n//n private static final String PERMISSION_DELIMETER = ///',///';//n//n ///n * 验证用户是否具备某权限,无权限返回hidden用于前端隐藏(如需返回Boolean使用isPermitted)//n * //n * @param permission 权限字符串//n * @return 用户是否具备某权限//n *///n public String hasPermi(String permission)//n {//n return isPermitted(permission) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否不具备某权限,与 hasPermi逻辑相反。无权限返回hidden用于前端隐藏(如需返回Boolean使用isLacksPermitted)//n *//n * @param permission 权限字符串//n * @return 用户是否不具备某权限//n *///n public String lacksPermi(String permission)//n {//n return isLacksPermitted(permission) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否具有以下任意一个权限,无权限返回hidden用于隐藏(如需返回Boolean使用hasAnyPermissions)//n *//n * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表//n * @return 用户是否具有以下任意一个权限//n *///n public String hasAnyPermi(String permissions)//n {//n return hasAnyPermissions(permissions, PERMISSION_DELIMETER) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否具备某角色,无权限返回hidden用于隐藏(如需返回Boolean使用isRole)//n * //n * @param role 角色字符串//n * @return 用户是否具备某角色//n *///n public String hasRole(String role)//n {//n return isRole(role) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否不具备某角色,与hasRole逻辑相反。无权限返回hidden用于隐藏(如需返回Boolean使用isLacksRole)//n * //n * @param role 角色字符串//n * @return 用户是否不具备某角色//n *///n public String lacksRole(String role)//n {//n return isLacksRole(role) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否具有以下任意一个角色,无权限返回hidden用于隐藏(如需返回Boolean使用isAnyRoles)//n *//n * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表//n * @return 用户是否具有以下任意一个角色//n *///n public String hasAnyRoles(String roles)//n {//n return isAnyRoles(roles, ROLE_DELIMETER) ? StringUtils.EMPTY : NOACCESS;//n }//n//n ///n * 验证用户是否认证通过或已记住的用户。//n *//n * @return 用户是否认证通过或已记住的用户//n *///n public boolean isUser()//n {//n Subject subject = SecurityUtils.getSubject();//n return subject != null && subject.getPrincipal() != null;//n }//n//n ///n * 判断用户是否拥有某个权限//n * //n * @param permission 权限字符串//n * @return 用户是否具备某权限//n *///n public boolean isPermitted(String permission)//n {//n return SecurityUtils.getSubject().isPermitted(permission);//n }//n//n ///n * 判断用户是否不具备某权限,与 isPermitted逻辑相反。//n *//n * @param permission 权限名称//n * @return 用户是否不具备某权限//n *///n public boolean isLacksPermitted(String permission)//n {//n return isPermitted(permission) != true;//n }//n//n ///n * 验证用户是否具有以下任意一个权限。//n *//n * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表//n * @return 用户是否具有以下任意一个权限//n *///n public boolean hasAnyPermissions(String permissions)//n {//n return hasAnyPermissions(permissions, PERMISSION_DELIMETER);//n }//n//n ///n * 验证用户是否具有以下任意一个权限。//n *//n * @param permissions 以 delimeter 为分隔符的权限列表//n * @param delimeter 权限列表分隔符//n * @return 用户是否具有以下任意一个权限//n *///n public boolean hasAnyPermissions(String permissions, String delimeter)//n {//n Subject subject = SecurityUtils.getSubject();//n//n if (subject != null)//n {//n if (delimeter == null || delimeter.length() == 0)//n {//n delimeter = PERMISSION_DELIMETER;//n }//n//n for (String permission : permissions.split(delimeter))//n {//n if (permission != null && subject.isPermitted(permission.trim()) == true)//n {//n return true;//n }//n }//n }//n//n return false;//n }//n//n ///n * 判断用户是否拥有某个角色//n * //n * @param role 角色字符串//n * @return 用户是否具备某角色//n *///n public boolean isRole(String role)//n {//n return SecurityUtils.getSubject().hasRole(role);//n }//n//n ///n * 验证用户是否不具备某角色,与 isRole逻辑相反。//n *//n * @param role 角色名称//n * @return 用户是否不具备某角色//n *///n public boolean isLacksRole(String role)//n {//n return isRole(role) != true;//n }//n//n ///n * 验证用户是否具有以下任意一个角色。//n *//n * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表//n * @return 用户是否具有以下任意一个角色//n *///n public boolean isAnyRoles(String roles)//n {//n return isAnyRoles(roles, ROLE_DELIMETER);//n }//n//n ///n * 验证用户是否具有以下任意一个角色。//n *//n * @param roles 以 delimeter 为分隔符的角色列表//n * @param delimeter 角色列表分隔符//n * @return 用户是否具有以下任意一个角色//n *///n public boolean isAnyRoles(String roles, String delimeter)//n {//n Subject subject = SecurityUtils.getSubject();//n if (subject != null)//n {//n if (delimeter == null || delimeter.length() == 0)//n {//n delimeter = ROLE_DELIMETER;//n }//n//n for (String role : roles.split(delimeter))//n {//n if (subject.hasRole(role.trim()) == true)//n {//n return true;//n }//n }//n }//n//n return false;//n }//n//n /*//n * 返回用户属性值//n *//n * @param property 属性名称//n * @return 用户属性值//n *///n public Object getPrincipalProperty(String property)//n {//n Subject subject = SecurityUtils.getSubject();//n if (subject != null)//n {//n Object principal = subject.getPrincipal();//n try//n {//n BeanInfo bi = Introspector.getBeanInfo(principal.getClass());//n for (PropertyDescriptor pd : bi.getPropertyDescriptors())//n {//n if (pd.getName().equals(property) == true)//n {//n return pd.getReadMethod().invoke(principal, (Object[]) null);//n }//n }//n }//n catch (Exception e)//n {//n log.error(///'Error reading property [{}] from principal of type [{}]///
原文地址: https://www.cveoy.top/t/topic/pAuJ 著作权归作者所有。请勿转载和采集!