package com.picc.admin.service.ipml;
|
|
import com.product.common.lang.StringUtils;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import com.product.core.permission.PermissionService;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.module.sys.entity.SystemUser;
|
|
/**
|
* 权限管理
|
*
|
* @author
|
*/
|
@Service
|
public class PermissionManagerService extends PermissionService {
|
@Autowired
|
private BaseDao baseDao;
|
|
/**
|
* 加载用户的权限
|
* 绵阳市看所有及子公司,子公司看自已公司,设有团队只能看公司范围内的团队的数据
|
* 每个表中必须要有 org_level_code字段 team_code字段
|
* @param tableName
|
* @return
|
*/
|
public String loadPermission(String tableName) {
|
boolean orgLevelCodeFlag = false;
|
boolean teamCodeFlag = false;
|
if (!StringUtils.isEmpty(tableName)) {
|
StringBuilder sql = new StringBuilder(256);
|
sql.append("\nselect group_concat(field_name) all_field_name");
|
sql.append("\nfrom product_sys_datamodel_field f");
|
sql.append("\ninner join product_sys_datamodel_table t on f.table_uuid=t.uuid and t.table_name=?");
|
sql.append("\nwhere field_name in ('org_level_code','team_code');");
|
FieldSetEntity fse = baseDao.getFieldSetEntityBySQL(sql.toString(), new Object[]{tableName}, false);
|
String allFieldName = fse.getString("all_field_name");
|
orgLevelCodeFlag = !StringUtils.isEmpty(allFieldName) && allFieldName.contains("org_level_code");
|
teamCodeFlag = !StringUtils.isEmpty(allFieldName) && allFieldName.contains("team_code");
|
}
|
if (!orgLevelCodeFlag && !teamCodeFlag) {
|
return "";
|
}
|
SystemUser user = SpringMVCContextHolder.getCurrentUser();
|
if(user==null) {
|
return " 1=2 ";
|
}
|
StringBuilder filter=new StringBuilder();
|
String tricode=user.getOrg_level_code();
|
String team=null;
|
if(!user.isManager() && user.getCurrentStaff()!=null) {
|
team=user.getCurrentStaff().getString("team_code");
|
}
|
if (orgLevelCodeFlag) {
|
filter.append("org_level_code like '").append(tricode).append("%'");
|
}
|
if(team != null && teamCodeFlag) {
|
if (filter.length() > 0) {
|
filter.append(" and ");
|
}
|
filter.append("team_code=").append(team);
|
filter.insert(0,"(").append(")");
|
}
|
return filter.toString();
|
}
|
|
public String loadPermission() {
|
return loadPermission(null);
|
}
|
}
|