Browse Source

open

master
pioneer 3 years ago
commit
f6c31c1031
  1. BIN
      JSD-9827-需求确认书V2.docx
  2. 3
      README.md
  3. 19
      plugin.xml
  4. 203
      src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java
  5. 1
      补充需求

BIN
JSD-9827-需求确认书V2.docx

Binary file not shown.

3
README.md

@ -0,0 +1,3 @@
# JSD-9827
JSD-9827

19
plugin.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.JSD9827</id>
<name><![CDATA[角色权限同步插件]]></name>
<active>yes</active>
<version>1.06</version>
<env-version>10.0</env-version>
<jartime>2020-05-01</jartime>
<vendor>fr.open</vendor>
<description><![CDATA[用户角色管理权限同步]]></description>
<change-notes><![CDATA[
[2022-03-23]初始化插件。<br/>
]]></change-notes>
<extra-core>
</extra-core>
<extra-decision>
<GlobalRequestFilterProvider class="com.fr.plugin.roles.JSDCustomRoleResource"/>
</extra-decision>
<function-recorder class="com.fr.plugin.roles.JSDCustomRoleResource"/>
</plugin>

203
src/main/java/com/fr/plugin/roles/JSDCustomRoleResource.java

@ -0,0 +1,203 @@
package com.fr.plugin.roles;
import com.fr.base.TableData;
import com.fr.decision.authority.base.constant.type.authority.AuthorityType;
import com.fr.decision.authority.base.constant.type.operation.OperationType;
import com.fr.decision.authority.data.CustomRole;
import com.fr.decision.authority.data.User;
import com.fr.decision.base.util.CollectionUtil;
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider;
import com.fr.decision.webservice.Response;
import com.fr.decision.webservice.bean.authority.PrivilegeBean;
import com.fr.decision.webservice.bean.authority.PrivilegeDetailBean;
import com.fr.decision.webservice.bean.user.*;
import com.fr.decision.webservice.utils.ControllerFactory;
import com.fr.decision.webservice.utils.controller.CustomRoleController;
import com.fr.decision.webservice.v10.authority.AuthorityService;
import com.fr.decision.webservice.v10.login.LoginService;
import com.fr.decision.webservice.v10.user.CustomRoleService;
import com.fr.decision.webservice.v10.user.UserService;
import com.fr.file.TableDataConfig;
import com.fr.general.data.DataModel;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.record.analyzer.EnableMetrics;
import com.fr.script.Calculator;
import com.fr.stable.StringUtils;
import com.fr.stable.query.data.DataList;
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse;
import com.fr.third.org.apache.http.client.methods.HttpPost;
import com.fr.third.org.apache.http.client.methods.HttpPut;
import com.fr.third.org.apache.http.entity.StringEntity;
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient;
import com.fr.third.org.apache.http.impl.client.HttpClientBuilder;
import com.fr.third.org.apache.http.util.EntityUtils;
import com.fr.web.utils.WebUtils;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@EnableMetrics
public class JSDCustomRoleResource extends AbstractGlobalRequestFilterProvider {
private static final String ROLES = "/decision/v10/roles";
//private static final String ROLES = "/decision/v10/roleserwrerer";
@Override
@Focus(id = "com.fr.plugin.JSD9827", text = "Plugin-JSD_9827_custom_role", source = Original.PLUGIN)
public String filterName() {
return "JSDCustomRoleResource";
}
@Override
public String[] urlPatterns() {
return new String[]{
"/decision/v10/roles"
};
}
@Override
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) {
String uri = req.getRequestURI();
try {
// 角色查询拦截
if (uri.endsWith(ROLES)) {
String currentUId = UserService.getInstance().getCurrentUserId(req);
String currentUserName = LoginService.getInstance().getUserNameFromRequest(req);
String page = WebUtils.getHTTPRequestParameter(req, "page");
String count = WebUtils.getHTTPRequestParameter(req, "count");
if (StringUtils.equals(req.getMethod(), "GET") && StringUtils.isNotEmpty(page) && StringUtils.isNotEmpty(count)) {
String keyword = WebUtils.getHTTPRequestParameter(req, "keyword");
int creationType = StringUtils.isEmpty(WebUtils.getHTTPRequestParameter(req, "creationType")) ? 0 : Integer.valueOf(WebUtils.getHTTPRequestParameter(req, "creationType"));
int privilegeType = StringUtils.isEmpty(WebUtils.getHTTPRequestParameter(req, "privilegeType")) ? 9 : Integer.valueOf(WebUtils.getHTTPRequestParameter(req, "privilegeType"));
List<String> uids = new ArrayList<>();
uids.add(currentUId);
TableData tableData = TableDataConfig.getInstance().getTableData("useraccess");
if (tableData != null) {
DataModel model = tableData.createDataModel(Calculator.createCalculator());
for (int i = 0; i < model.getRowCount(); i++) {
String userName = (String) model.getValueAt(i, 0);
if (currentUserName.equals(userName)) {
continue;
}
User user = UserService.getInstance().getUserByUserName(userName);
if (user != null) {
String uid = user.getId();
shareRoles(uid, currentUId, req);
}
}
}
//Response roleList = getRoleList(uids.toArray(new String[0]), Integer.valueOf(page), Integer.valueOf(count), keyword, creationType, privilegeType);
Response roleList = getRoleList(currentUId, Integer.valueOf(page), Integer.valueOf(count), keyword, creationType, privilegeType);
WebUtils.printAsJSON(res, JSONObject.mapFrom(roleList));
return;
}
}
filterChain.doFilter(req, res);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e, e.getMessage());
}
}
/**
* 将A用户的角色共享给B用户
*/
private void shareRoles(String srcUid, String destUid, HttpServletRequest req) throws Exception {
List<CustomRole> customRoles = getAllRoles(srcUid, 0);
if (customRoles != null) {
// 获取原用户的角色权限
JSONObject jsonObject = new JSONObject();
jsonObject.put("carrierType", "user");
jsonObject.put("entityType", "customRole");
jsonObject.put("carrierId", srcUid);
JSONArray jsonArray = new JSONArray();
for (CustomRole role : customRoles) {
jsonArray.put(role.getId());
}
jsonObject.put("entityIds", jsonArray);
StringBuffer reqUrl = req.getRequestURL();
String url = reqUrl.delete(reqUrl.length() - req.getRequestURI().length(), reqUrl.length()).toString();
url += "/webroot/decision/v10/authority/carrier";
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpPost request = new HttpPost(url);
request.setHeader("Content-Type", "application/json");
request.setHeader("Authorization", req.getHeader("Authorization"));
StringEntity entity = new StringEntity(jsonObject.toString(), "UTF-8");
request.setEntity(entity);
CloseableHttpResponse response = client.execute(request);
String res = EntityUtils.toString(response.getEntity(), "UTF-8");
// 更新目标用户的角色权限
if (StringUtils.isNotEmpty(res)) {
JSONObject jsonObjectRes = new JSONObject(res);
JSONObject data = jsonObjectRes.getJSONObject("data");
if (data == null) {
FineLoggerFactory.getLogger().info("原用户角色权限数据为空");
return;
}
JSONArray roleArr = data.getJSONArray("customRole");
if (roleArr == null) {
FineLoggerFactory.getLogger().info("原用户角色权限数据为空");
return;
}
for (int i = 0; i < roleArr.size(); i++) {
JSONObject roleJson = (JSONObject) roleArr.get(i);
JSONArray values = roleJson.getJSONArray("values");
if (values == null) {
continue;
}
PrivilegeBean privilegeBean = new PrivilegeBean();
privilegeBean.setId(roleJson.getString("id"));
List<PrivilegeDetailBean> detailBeans = new ArrayList<>();
for (int j = 0; j < values.size(); j++) {
JSONObject val = values.getJSONObject(j);
PrivilegeDetailBean detailBean = new PrivilegeDetailBean();
detailBean.setPrivilegeType(val.getInt("privilegeType"));
detailBean.setPrivilegeValue(val.getInt("privilegeValue"));
detailBeans.add(detailBean);
}
privilegeBean.setValues(detailBeans.toArray(new PrivilegeDetailBean[0]));
AuthorityService.getInstance().updateAuthorityEntityByCarrier(destUid, "user", destUid, privilegeBean, "customRole");
}
}
}
}
private List<CustomRole> getAllRoles(String uid, int creationType) throws Exception {
OperationType[] operTypeArr = creationType == 0 ? new OperationType[0] : new OperationType[]{OperationType.fromInteger(creationType)};
CustomRoleController customRoleController = ControllerFactory.getInstance().getCustomRoleController(uid);
//DataList<CustomRole> customRoles = customRoleController.getCustomRoles(uid, 1, 1000, "", operTypeArr);
DataList<CustomRole> customRoles = customRoleController.getCustomRoles(uid, 1, 1000, "");
return customRoles.getList();
}
private Response getRoleList(String userid, int page, int count, String keyword, int creationType, int privilegeType) throws Exception {
AuthorityType authorityType = AuthorityType.fromInteger(privilegeType);
OperationType[] operTypeArr = creationType == 0 ? new OperationType[0] : new OperationType[]{OperationType.fromInteger(creationType)};
//Map<String, Object> customRoleMap = CustomRoleService.getInstance().getCustomRoles(userid, page, count, keyword, operTypeArr);
Map<String, Object> customRoleMap = CustomRoleService.getInstance().getCustomRoles(userid, page, count, keyword);
return Response.ok(customRoleMap);
}
}

1
补充需求

@ -0,0 +1 @@
补充需求,关联任务JSD-10482
Loading…
Cancel
Save