c40aef72a0babf24b492aef26d0a827f36bac94c
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.base.domain.repo;
2
3 import java.util.LinkedHashMap;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.Optional;
7
8 import org.springframework.data.domain.Example;
9 import org.springframework.data.domain.ExampleMatcher;
10 import org.springframework.data.domain.Page;
11 import org.springframework.data.domain.PageRequest;
12 import org.springframework.stereotype.Repository;
13
14 import com.supwisdom.institute.backend.base.domain.entity.Permission;
15 import com.supwisdom.institute.backend.base.domain.entity.PermissionResource;
16 import com.supwisdom.institute.backend.base.domain.entity.Resource;
17 import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository;
18 import com.supwisdom.institute.backend.common.util.MapBeanUtils;
19
20 @Repository
21 public interface PermissionResourceRepository extends BaseJpaRepository<PermissionResource> {
22
23   public default Page<PermissionResource> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
24     PermissionResource probe = new PermissionResource();
25     if (mapBean != null) {
26       probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
27       probe.setResourceId(MapBeanUtils.getString(mapBean, "resourceId"));
28     }
29
30     ExampleMatcher matcher = ExampleMatcher.matching()
31         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
32         .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact());
33
34     PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
35     Example<PermissionResource> example = Example.of(probe, matcher);
36
37     Page<PermissionResource> page = this.findAll(example, pageRequest);
38
39     return page;
40   }
41
42   public default Page<PermissionResource> selectPermissionResources(int pageIndex, int pageSize, Map<String, Object> mapBean) {
43
44     PermissionResource probe = new PermissionResource();
45     if (mapBean != null) {
46       probe.setPermissionId(MapBeanUtils.getString(mapBean, "permissionId"));
47       probe.setResourceId(MapBeanUtils.getString(mapBean, "resourceId"));
48     }
49
50     ExampleMatcher matcher = ExampleMatcher.matching()
51         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
52         .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact());
53
54     Example<PermissionResource> example = Example.of(probe, matcher);
55
56     PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
57
58     Page<PermissionResource> page = this.findAll(example, pageRequest); // FIXME: 多表关联查询
59
60     return page;
61   }
62
63   public default void relatePermissionResources(Permission permission, List<PermissionResource> relateResources) {
64
65     List<PermissionResource> existPermissionResources = this.selectListByPermissionId(permission.getId());
66
67     Map<String, PermissionResource> existMapPermissionResources = new LinkedHashMap<String, PermissionResource>();
68     for (PermissionResource permissionResource : existPermissionResources) {
69       String k = String.format("%s", permissionResource.getResourceId());
70       existMapPermissionResources.put(k, permissionResource);
71     }
72
73     for (PermissionResource permissionResource : relateResources) {
74       String k = String.format("%s", permissionResource.getResourceId());
75
76       if (existMapPermissionResources.containsKey(k)) {
77         existMapPermissionResources.remove(k);
78       } else {
79         permissionResource.setCompanyId(permission.getCompanyId());
80         permissionResource.setPermissionId(permission.getId());
81
82         this.insert(permissionResource);
83       }
84     }
85
86     for (PermissionResource rolePermission : existMapPermissionResources.values()) {
87       this.deleteById(rolePermission.getId());
88     }
89   }
90
91   public default List<PermissionResource> selectListByPermissionId(String permissionId) {
92
93     PermissionResource probe = new PermissionResource();
94     probe.setPermissionId(permissionId);
95
96     ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("permissionId",
97         ExampleMatcher.GenericPropertyMatchers.exact());
98
99     Example<PermissionResource> example = Example.of(probe, matcher);
100
101     List<PermissionResource> rolePermissions = this.findAll(example);
102
103     return rolePermissions;
104   }
105
106   
107   public default void relateResourcePermissions(Resource resource, List<PermissionResource> relatePermissions) {
108
109     // 获取权限已关联的角色
110     List<PermissionResource> existResourcePermissions = this.selectListByResourceId(resource.getId());
111
112     Map<String, PermissionResource> existMapResourcePermissions = new LinkedHashMap<String, PermissionResource>();
113     for (PermissionResource permissionResource : existResourcePermissions) {
114       String k = String.format("%s", permissionResource.getPermissionId());
115       existMapResourcePermissions.put(k, permissionResource);
116     }
117
118     // 保存未关联的角色
119     for (PermissionResource permissionResource : relatePermissions) {
120       String k = String.format("%s", permissionResource.getPermissionId());
121
122       if (existMapResourcePermissions.containsKey(k)) {
123         existMapResourcePermissions.remove(k);
124       } else {
125         permissionResource.setCompanyId(resource.getCompanyId());
126         permissionResource.setResourceId(resource.getId());
127
128         this.insert(permissionResource);
129       }
130     }
131
132     // 删除移除关联的角色
133     for (PermissionResource rolePermission : existMapResourcePermissions.values()) {
134       this.deleteById(rolePermission.getId());
135     }
136   }
137   public default List<PermissionResource> selectListByResourceId(String resourceId) {
138
139     PermissionResource probe = new PermissionResource();
140     probe.setResourceId(resourceId);
141
142     ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("resourceId",
143         ExampleMatcher.GenericPropertyMatchers.exact());
144
145     Example<PermissionResource> example = Example.of(probe, matcher);
146
147     List<PermissionResource> rolePermissions = this.findAll(example);
148
149     return rolePermissions;
150   }
151
152   
153   public default PermissionResource selectOneByPermissionResource(String permissionId, String resourceId) {
154
155     PermissionResource probe = new PermissionResource();
156     probe.setPermissionId(permissionId);
157     probe.setResourceId(resourceId);
158
159     ExampleMatcher matcher = ExampleMatcher.matching()
160         .withMatcher("permissionId", ExampleMatcher.GenericPropertyMatchers.exact())
161         .withMatcher("resourceId", ExampleMatcher.GenericPropertyMatchers.exact())
162         ;
163
164     Example<PermissionResource> example = Example.of(probe, matcher);
165     
166     Optional<PermissionResource> o = this.findOne(example);
167     
168     return o.isPresent() ? o.get() : null;
169   }
170
171   public default void addPermissionResource(String permissionId, String resourceId) {
172
173     PermissionResource rolePermission = this.selectOneByPermissionResource(permissionId, resourceId);
174     
175     if (rolePermission == null) {
176       rolePermission = new PermissionResource();
177       //rolePermission.setCompanyId(companyId);
178       rolePermission.setPermissionId(permissionId);
179       rolePermission.setResourceId(resourceId);
180       
181       this.insert(rolePermission);
182     }
183   }
184
185   public default void removePermissionResource(String permissionId, String resourceId) {
186
187     PermissionResource rolePermission = this.selectOneByPermissionResource(permissionId, resourceId);
188     
189     if (rolePermission != null) {
190       this.deleteById(rolePermission.getId());
191     }
192   }
193
194 }