From b46e30282451fdb7de5624033bb625beb41a296d Mon Sep 17 00:00:00 2001 From: zhangwei Date: Mon, 21 May 2018 17:21:21 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=95=B0=E6=8D=AE=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2=E7=AD=9B?= =?UTF-8?q?=E9=80=89=EF=BC=9B2=E3=80=81=E7=95=8C=E9=9D=A2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8C=89=E9=92=AE=E6=A0=B9=E6=8D=AE=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=98=BE=E7=A4=BA=EF=BC=9B3=E3=80=81?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E5=90=8E=EF=BC=8C=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=AE=BF=E9=97=AE=E9=93=BE=E6=8E=A5=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=9A=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nis/web/dao/configuration/AvCfgDao.xml | 4 ++ .../java/com/nis/web/service/BaseService.java | 59 +++++++++++++++++-- .../service/configuration/AvCfgService.java | 11 +++- .../WEB-INF/views/cfg/av/fileSampleList.jsp | 23 ++++---- .../WEB-INF/views/cfg/av/signSampleList.jsp | 22 +++---- 5 files changed, 93 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/nis/web/dao/configuration/AvCfgDao.xml b/src/main/java/com/nis/web/dao/configuration/AvCfgDao.xml index 9764f269b..f145148fc 100644 --- a/src/main/java/com/nis/web/dao/configuration/AvCfgDao.xml +++ b/src/main/java/com/nis/web/dao/configuration/AvCfgDao.xml @@ -177,6 +177,8 @@ AND a.level=#{level,jdbcType=INTEGER} + + ${sqlMap.dsf} @@ -274,6 +276,8 @@ AND a.description like concat(concat('%',#{description,jdbcType=VARCHAR}),'%') + + ${sqlMap.dsf} diff --git a/src/main/java/com/nis/web/service/BaseService.java b/src/main/java/com/nis/web/service/BaseService.java index a0891b4f3..207b47cd5 100644 --- a/src/main/java/com/nis/web/service/BaseService.java +++ b/src/main/java/com/nis/web/service/BaseService.java @@ -56,7 +56,7 @@ public abstract class BaseService { for (String oa : StringUtils.split(officeAlias, ",")){ if (!dataScope.contains(r.getDataScope()) && StringUtils.isNotBlank(oa)){ - sqlString.append(createScopeSql(r.getDataScope(),oa,user)); + sqlString.append(createScopeSql(r.getDataScope(),oa,user,null)); dataScope.add(r.getDataScope()); } } @@ -84,7 +84,48 @@ public abstract class BaseService { return ""; } - + /** + * 数据范围过滤 + * @param user 当前用户对象,通过“entity.getCurrentUser()”获取 + * @param configAlias 配置表别名,多个用","逗号隔开,传递空,忽略此参数 + * @return 标准连接条件对象 + */ + public static String configScopeFilter(SysUser user, String configAlias) { + + + StringBuilder sqlString = new StringBuilder(); + + // 进行权限过滤,多个角色权限范围之间为或者关系。 + List dataScope = Lists.newArrayList(); + + if (StringUtils.isBlank(user.getLoginId())){ + return ""; + } + + // 超级管理员,跳过权限过滤 + if (!user.isAdmin()){ + boolean isDataScopeAll = isContainsDataScopeAll(user.getUserRoleList()); + // 如果没有全部数据权限 + if (!isDataScopeAll){ + for (SysRole r : user.getUserRoleList()) { + for (String c : StringUtils.split(configAlias, ",")){ + if (!dataScope.contains(r.getDataScope()) && StringUtils.isNotBlank(c)){ + sqlString.append(createScopeSql(r.getDataScope(),"",user,c)); + dataScope.add(r.getDataScope()); + } + } + } + + }else{ + // 如果包含全部权限,则去掉之前添加的所有条件,并跳出循环。 + sqlString = new StringBuilder(); + } + } + if (StringUtils.isNotBlank(sqlString.toString())){ + return " AND (" + sqlString.substring(4) + ")"; + } + return ""; + } /** @@ -108,10 +149,12 @@ public abstract class BaseService { /** * 过滤机构信息 - * @param dataScope 数据范围(1:所有数据;2:所在公司及以下数据;3:所在公司数据;4:所在部门及以下数据;5:所在部门数据;6:所在单位及以下数据;7:所在单位数据) + * @param dataScope 数据范围(1:所有数据;2:所在公司及以下数据;3:所在公司数据; + * 4:所在部门及以下数据;5:所在部门数据;6:所在单位及以下数据;7:所在单位数据; + * 8:操作员数据;9:审核员数据,10:审计员数据) * @return */ - private static String createScopeSql(int dataScope,String officeAlias,SysUser user) { + private static String createScopeSql(int dataScope,String officeAlias,SysUser user,String configAlias) { StringBuilder scopeSql = new StringBuilder(1024); if (SysRole.DATA_SCOPE_COMPANY_AND_CHILD.equals(dataScope)){ @@ -139,6 +182,14 @@ public abstract class BaseService { // 包括本公司下的部门 (type=1:公司;type=2:单位 3.部门) scopeSql.append(" OR (" + officeAlias + ".parent_id = '" + user.getEntity().getId() + "' AND " + officeAlias + ".type>1)"); + }else if (SysRole.DATA_SCOPE_CREATOR.equals(dataScope)){ + scopeSql.append(" OR " + configAlias + ".is_audit !=3"); + } + else if (SysRole.DATA_SCOPE_AUDITOR.equals(dataScope)){ + scopeSql.append(" OR " + configAlias + ".is_audit = 0 and " + configAlias + ".is_valid = 0"); + } + else if (SysRole.DATA_SCOPE_SHOWER.equals(dataScope)){ + scopeSql.append(" OR " + configAlias + ".is_audit = 1"); } return scopeSql.toString(); diff --git a/src/main/java/com/nis/web/service/configuration/AvCfgService.java b/src/main/java/com/nis/web/service/configuration/AvCfgService.java index cd096d8ca..11b643a1e 100644 --- a/src/main/java/com/nis/web/service/configuration/AvCfgService.java +++ b/src/main/java/com/nis/web/service/configuration/AvCfgService.java @@ -50,12 +50,16 @@ public class AvCfgService extends BaseService{ return avCfgDao.getAvSignSampleById(cfgId); } public Page getAvFileSampleList(Page page, AvFileSampleCfg entity){ + // 生成数据权限过滤条件(dsf为dataScopeFilter的简写,在xml中使用 ${sqlMap.dsf}调用权限SQL) + entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"a")); entity.setPage(page); List list = avCfgDao.getAvFileSampleList(entity); page.setList(list); return page; } public Page getAvSignSampleList(Page page, AvSignSampleCfg entity){ + // 生成数据权限过滤条件(dsf为dataScopeFilter的简写,在xml中使用 ${sqlMap.dsf}调用权限SQL) + entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"a")); entity.setPage(page); List list = avCfgDao.getAvSignSampleList(entity); page.setList(list); @@ -157,6 +161,9 @@ public class AvCfgService extends BaseService{ srcMap.put("checksum", entity.getSrcMd5()); String result1 = ConfigServiceUtil.postFileCfg(null, srcFile, JSONObject.fromObject(srcMap)); logger.info("音视频源文件上传响应信息:"+result1); + //获取文件上传响应信息(文件访问路径) + Map srcRes = gson.fromJson(result1,Map.class); + entity.setSrcUrl(srcRes.get("data").toString()); File smapleFile = new File(entity.getSamplePath()); Map sampleMap = new HashMap(); @@ -167,7 +174,9 @@ public class AvCfgService extends BaseService{ sampleMap.put("checksum", entity.getSampleMd5()); String result2 = ConfigServiceUtil.postFileCfg(null, srcFile, JSONObject.fromObject(sampleMap)); logger.info("音视频样例文件上传响应信息:"+result2); - + Map sampleRes = gson.fromJson(result1,Map.class); + //获取文件上传响应信息(文件访问路径) + entity.setSampleUrl(sampleRes.get("data").toString()); } catch (Exception e) { e.printStackTrace(); logger.info("音视频文件样例配置下发失败"); diff --git a/src/main/webapp/WEB-INF/views/cfg/av/fileSampleList.jsp b/src/main/webapp/WEB-INF/views/cfg/av/fileSampleList.jsp index 531a1baf6..93be14dbd 100644 --- a/src/main/webapp/WEB-INF/views/cfg/av/fileSampleList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/av/fileSampleList.jsp @@ -52,10 +52,12 @@

@@ -293,7 +295,7 @@ - ${fn:substring(cfg.srcUrl,0,20) } @@ -307,12 +309,11 @@ ${cfg.level } ${cfg.cfgDesc } - - - - - - + + + + + diff --git a/src/main/webapp/WEB-INF/views/cfg/av/signSampleList.jsp b/src/main/webapp/WEB-INF/views/cfg/av/signSampleList.jsp index b9f0c2446..870550b78 100644 --- a/src/main/webapp/WEB-INF/views/cfg/av/signSampleList.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/av/signSampleList.jsp @@ -54,10 +54,13 @@

@@ -87,7 +90,7 @@ - + <%-- --%>

@@ -303,12 +306,11 @@ ${cfg.level } ${cfg.cfgDesc } - - - - - - + + + + +