package com.ots.framework.web.service;
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.subject.Subject;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Service;
|
import java.beans.BeanInfo;
|
import java.beans.Introspector;
|
import java.beans.PropertyDescriptor;
|
|
@Service("permission")
|
public class PermissionService {
|
private static final Logger log = LoggerFactory.getLogger(PermissionService.class);
|
public String hasPermi(String permission) {
|
return isPermittedOperator(permission) ? "" : "hidden";
|
}
|
public String hasRole(String role) {
|
return hasRoleOperator(role) ? "" : "hidden";
|
}
|
|
private boolean isPermittedOperator(String permission) {
|
return SecurityUtils.getSubject().isPermitted(permission);
|
}
|
|
private boolean hasRoleOperator(String role) {
|
return SecurityUtils.getSubject().hasRole(role);
|
}
|
|
public Object getPrincipalProperty(String property) {
|
Subject subject = SecurityUtils.getSubject();
|
if (subject != null) {
|
Object principal = subject.getPrincipal();
|
try {
|
BeanInfo bi = Introspector.getBeanInfo(principal.getClass());
|
for (PropertyDescriptor pd : bi.getPropertyDescriptors()) {
|
if (pd.getName().equals(property) == true) {
|
return pd.getReadMethod().invoke(principal, (Object[]) null);
|
}
|
}
|
} catch (Exception e) {
|
log.error("Error reading property [{}] from principal of type [{}]", property,
|
principal.getClass().getName());
|
}
|
}
|
return null;
|
}
|
}
|