From 303b0c3419f181e718ce44f0d24ec120e31dfde6 Mon Sep 17 00:00:00 2001 From: pioneer Date: Thu, 5 Jan 2023 16:36:12 +0800 Subject: [PATCH] open --- JSD-10401-需求确认书V2.docx | Bin 0 -> 60653 bytes README.md | 6 + plugin.xml | 19 ++ .../plugin/permission/PermissionMonitor.java | 24 ++ .../plugin/permission/PermissionServer.java | 26 ++ .../permission/action/DirectoryPath.java | 251 ++++++++++++++++++ 6 files changed, 326 insertions(+) create mode 100644 JSD-10401-需求确认书V2.docx create mode 100644 README.md create mode 100644 plugin.xml create mode 100644 src/main/java/com/fr/plugin/permission/PermissionMonitor.java create mode 100644 src/main/java/com/fr/plugin/permission/PermissionServer.java create mode 100644 src/main/java/com/fr/plugin/permission/action/DirectoryPath.java diff --git a/JSD-10401-需求确认书V2.docx b/JSD-10401-需求确认书V2.docx new file mode 100644 index 0000000000000000000000000000000000000000..0f88a1523324e7e931b7964522ca7fdf0cf4f5d2 GIT binary patch literal 60653 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee2560e --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# open-JSD-10401 + +JSD-10401 客户pc端使用的我们的fs,配置的fs目录权限。移动端自己的app使用的我们的h5报表,移动端想传入过来用户 然后返回用户对应的目录数据\ +免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ +仅作为开发者学习参考使用!禁止用于任何商业用途!\ +为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 \ No newline at end of file diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..ee0ce9e --- /dev/null +++ b/plugin.xml @@ -0,0 +1,19 @@ + + com.fr.plugin.permission10 + + yes + 1.0 + 10.0 + 2018-07-31 + fr.open + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/permission/PermissionMonitor.java b/src/main/java/com/fr/plugin/permission/PermissionMonitor.java new file mode 100644 index 0000000..49127df --- /dev/null +++ b/src/main/java/com/fr/plugin/permission/PermissionMonitor.java @@ -0,0 +1,24 @@ +package com.fr.plugin.permission; + +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginContext; +import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; +import com.fr.plugin.transform.FunctionRecorder; +import com.fr.record.analyzer.EnableMetrics; + +@EnableMetrics +@FunctionRecorder +public class PermissionMonitor extends AbstractPluginLifecycleMonitor { + + @Focus(id = "com.fr.plugin.permission10", text = "permission10", source = Original.PLUGIN) + public void afterRun(PluginContext pluginContext) { + FineLoggerFactory.getLogger().info( "获取权限请求插件启动完成"); + } + + + public void beforeStop(PluginContext pluginContext) { + FineLoggerFactory.getLogger().info("获取权限请求插件即将停止"); + } +} diff --git a/src/main/java/com/fr/plugin/permission/PermissionServer.java b/src/main/java/com/fr/plugin/permission/PermissionServer.java new file mode 100644 index 0000000..e53645a --- /dev/null +++ b/src/main/java/com/fr/plugin/permission/PermissionServer.java @@ -0,0 +1,26 @@ +package com.fr.plugin.permission; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.fr.plugin.permission.action.DirectoryPath; +import com.fr.stable.fun.Service; +import com.fr.stable.web.RequestCMDReceiver; +import com.fr.web.core.WebActionsDispatcher; + +public class PermissionServer implements Service { + private static RequestCMDReceiver[] actions = { + new DirectoryPath() + }; + + @Override + public String actionOP() { + return "permission"; + } + + @Override + public void process(HttpServletRequest req, HttpServletResponse res, String op, String sessionid) throws Exception { + WebActionsDispatcher.dealForActionCMD(req, res, sessionid, actions); + } + +} diff --git a/src/main/java/com/fr/plugin/permission/action/DirectoryPath.java b/src/main/java/com/fr/plugin/permission/action/DirectoryPath.java new file mode 100644 index 0000000..c8e3803 --- /dev/null +++ b/src/main/java/com/fr/plugin/permission/action/DirectoryPath.java @@ -0,0 +1,251 @@ +package com.fr.plugin.permission.action; +import java.io.PrintWriter; +import java.util.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.fr.decision.webservice.bean.entry.EntryBean; +import com.fr.decision.webservice.bean.entry.HomePageBean; +import com.fr.decision.webservice.bean.entry.TemplateBean; +import com.fr.decision.webservice.v10.entry.EntryService; +import com.fr.decision.authority.data.User; +import com.fr.decision.webservice.v10.user.UserService; +import com.fr.fs.cache.EntryTypeAndID; +import com.fr.fs.cache.decision.category.impl.memory.EntryTreeFolderNode; +import com.fr.fs.control.EntryControl; +import com.fr.fs.control.UserControl; +import com.fr.fs.privilege.base.FSPrivilegeTools; +import com.fr.fs.schedule.entry.ReportletEntry; +import com.fr.fs.web.platform.entry.Entry; +import com.fr.fs.web.platform.entry.EntryConstants; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.CodeUtils; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.web.core.ActionNoSessionCMD; +import com.fr.web.utils.WebUtils; +//http://localhost:8075/webroot/decision/view/report?op=permission&cmd=display&user=eoco +public class DirectoryPath extends ActionNoSessionCMD { + private static String paraPath="&__bypagesize__=false&op=h5&username="; + private static String domain="https://xxx.com.cn"; + @Override + public String getCMD() { + return "display"; + } + @Override + public void actionCMD(HttpServletRequest req, HttpServletResponse res) throws Exception { + PrintWriter out = WebUtils.createPrintWriter(res); + getDisplay(req, out); + out.flush(); + out.close(); + } + + private int getId(String id){ + String[] ids = id.split("-"); + String last = ids[ids.length -1]; + try{ + int a = Integer.parseInt(last); + return a; + } + catch(Exception ex){ + ex.printStackTrace(); + return 0; + } + } + + protected void getDisplay(HttpServletRequest req,PrintWriter print){ + String username = WebUtils.getHTTPRequestParameter(req, "user"); + String callback=WebUtils.getHTTPRequestParameter(req, "callback"); + com.fr.json.JSONObject outObject= com.fr.json.JSONObject.create(); + JSONArray result=JSONArray.create(); + try { + User user = UserService.getInstance().getUserByUserName(username); + if(user==null){ + outObject.put("reportlets", result); + String out=StringUtils.isBlank(callback)?outObject.toString():callback+"("+outObject.toString()+")"; + print.write(out); + return; + } + + List entryBeans2 = EntryService.getInstance().getAllEntries(user.getId()); + + if(entryBeans2.size() > 0){ + + Map idEntryBeanMap = new HashMap<>(); + List allNodes = new ArrayList<>(); + for(EntryBean bean : entryBeans2){ + DirNode dirNode = new DirNode(); + dirNode.id = bean.getId(); + dirNode.pid = bean.getpId(); + dirNode.text = bean.getText(); + dirNode.path = bean.getPath(); + dirNode.child = new ArrayList<>(); + idEntryBeanMap.put(dirNode.id ,dirNode); + allNodes.add(dirNode); + } + + List noParentNodes = new ArrayList<>(); + + for(DirNode dNode : allNodes){ + DirNode parent = idEntryBeanMap.get(dNode.pid); + if(parent != null){ + parent.child.add(dNode); + } + else{ + dNode.text = "管理目录"; + noParentNodes.add(dNode); + } + } + iterateChild(result,noParentNodes,req,username); + FineLoggerFactory.getLogger().info( "noParentNodes:"+noParentNodes.size()); + } + + + + if(result.length() > 0){ + com.fr.json.JSONObject re = (com.fr.json.JSONObject)result.get(0); + JSONArray result1 = (JSONArray)re.get("child"); + if(result1 != null){ + outObject.put("reportlets",result1); + } + else{ + outObject.put("reportlets",JSONArray.create()); + } + } + else{ + outObject.put("reportlets",JSONArray.create()); + } + + + String out=StringUtils.isBlank(callback)?outObject.toString():callback+"("+outObject.toString()+")"; + print.write(out); + } catch (Exception e) { + FRLogger.getLogger().errorWithServerLevel(e.getMessage(), e); + } + } + + private void iterateChild(JSONArray result,List nodes,HttpServletRequest req,String username) throws JSONException { + for(DirNode node : nodes){ + com.fr.json.JSONObject childJson = com.fr.json.JSONObject.create(); + result.put(childJson); + childJson.put("id", getId(node.id)); + childJson.put("name", node.text); + childJson.put("url", getNewUrlByPath(req,username,node.path)); + JSONArray resultChilds = JSONArray.create(); + childJson.put("child",resultChilds); + if(node.child != null && node.child.size() > 0){ + iterateChild(resultChilds,node.child,req,username); + } + + } + } + + /** + * 得到新的url + * @param req + * @param type + * @param id + * @param username + * @return + */ + protected String getUrl(HttpServletRequest req,int type,long id,String username){ + String url=""; + Entry entry = EntryControl.getInstance().getEntry(type, id); + if(entry instanceof ReportletEntry){ + ReportletEntry re=(ReportletEntry)entry; + url=re.getWebletPath(); + String reportpara="reportlet="; + if(url.endsWith(".frm")){ + reportpara="formlet="; + } + url=domain+req.getRequestURI().toString()+"?"+reportpara+url+paraPath+username; + } + return CodeUtils.cjkEncode(url); + } + + protected String getNewUrlByEntryBean(HttpServletRequest req,String username,EntryBean bean){ + String url=""; + if(bean != null){ + if(bean instanceof HomePageBean) { + HomePageBean re = (HomePageBean) bean; + url = re.getMobileHomePage(); + if (StringUtils.isEmpty(url)) { + url = re.getPcHomePage(); + } + if (StringUtils.isEmpty(url)) { + url = re.getPadHomePage(); + } + String reportpara = "reportlet="; + if (url.endsWith(".frm")) { + reportpara = "formlet="; + } + url = domain + req.getRequestURI().toString() + "?" + reportpara + url + paraPath + username; + } + } + + return CodeUtils.cjkEncode(url); + } + + + protected String getNewUrlByPath(HttpServletRequest req,String username,String path){ + String url=""; + if(StringUtils.isNotEmpty(path)){ + url = path; + String reportpara = "reportlet="; + if (url.endsWith(".frm")) { + reportpara = "formlet="; + } + url = domain + req.getRequestURI().toString() + "?" + reportpara + url + paraPath + username; + } + + return CodeUtils.cjkEncode(url); + } + /** + * 的到新的JSONArray + * @param req + * @param oldArr + * @param resultArr + * @param username + * @throws JSONException + */ + protected void copyJSONArray(HttpServletRequest req,JSONArray oldArr,JSONArray resultArr,String username) throws JSONException{ + int len=oldArr.length(); + for(int i=0;i>>>>> id:"+id); + resultObj.put("id", id); + resultObj.put("name", oldObj.optString("text")); + JSONArray resultChilds=JSONArray.create(); + if(oldObj.optBoolean("hasChildren")&&oldObj.has("ChildNodes")){ + JSONArray childs=oldObj.getJSONArray("ChildNodes"); + copyJSONArray(req,childs,resultChilds,username); + } + String url=getUrl(req,oldObj.optInt("type"), Long.valueOf(id),username); + resultObj.put("url", url); + resultObj.put("child", resultChilds); + + resultArr.put(resultObj); + } + } +} + + +class DirNode{ + public String id; + public String pid; + + public String text; + public String path; + + public DirNode parent; + + public List child; + + +}