1821349743@qq.com
2023-04-06 be4c913206aba510abb30ceeb145424f18407592
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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);
    }
}