xiatian hace 1 año
padre
commit
7201d3d5f0

+ 48 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/TreeNode.java

@@ -0,0 +1,48 @@
+package cn.com.qmth.stmms.biz.basic.bean;
+
+public class TreeNode {
+	private String code;
+	private String parentCode;
+	private String name;
+	private Boolean checked;
+	private Integer seq;
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public String getParentCode() {
+		return parentCode;
+	}
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Boolean getChecked() {
+		return checked;
+	}
+	public void setChecked(Boolean checked) {
+		this.checked = checked;
+	}
+	public Integer getSeq() {
+		return seq;
+	}
+	public void setSeq(Integer seq) {
+		this.seq = seq;
+	}
+	public TreeNode(String code, String parentCode, String name, Boolean checked, Integer seq) {
+		super();
+		this.code = code;
+		this.parentCode = parentCode;
+		this.name = name;
+		this.checked = checked;
+		this.seq = seq;
+	}
+	
+}

+ 17 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/PrivilegeDao.java

@@ -0,0 +1,17 @@
+package cn.com.qmth.stmms.biz.basic.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.basic.model.Privilege;
+import cn.com.qmth.stmms.common.enums.PrivilegeType;
+
+public interface PrivilegeDao extends PagingAndSortingRepository<Privilege, Integer>, JpaSpecificationExecutor<Privilege>,
+        JpaRepository<Privilege, Integer> {
+
+	List<Privilege> findByPrivilegeTypeOrderByLevelAscSeqAsc(PrivilegeType menu);
+
+}

+ 17 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/RolePrivilegeDao.java

@@ -0,0 +1,17 @@
+package cn.com.qmth.stmms.biz.basic.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.basic.model.RolePrivilege;
+import cn.com.qmth.stmms.common.enums.Role;
+
+public interface RolePrivilegeDao extends PagingAndSortingRepository<RolePrivilege, Integer>, JpaSpecificationExecutor<RolePrivilege>,
+        JpaRepository<RolePrivilege, Integer> {
+
+	List<RolePrivilege> findBySchoolIdAndRoleCodeAndEnable(Integer schoolId, Role role, boolean b);
+
+}

+ 155 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/model/Privilege.java

@@ -0,0 +1,155 @@
+package cn.com.qmth.stmms.biz.basic.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import cn.com.qmth.stmms.common.enums.PrivilegeType;
+
+@Entity
+@Table(name = "b_privilege")
+public class Privilege implements Serializable {
+
+    private static final long serialVersionUID = -6288949236298877031L;
+    public static final String rootCode="root_code";
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue
+    private Integer id;
+    /**
+     * 权限码
+     */
+    @Column(name = "code",nullable = false)
+    private String code;
+
+    /**
+     * 权限名称
+     */
+    @Column(name = "name",nullable = false)
+    private String name;
+
+    /**
+     * 父权限code
+     */
+    @Column(name = "parent_code",nullable = false)
+    private String parentCode;
+
+    /**
+     * 排序
+     */
+    @Column(name = "seq",nullable = false)
+    private Integer seq;
+
+    @Enumerated(EnumType.STRING)
+    @Column(name = "privilege_type",nullable = false)
+    private PrivilegeType privilegeType;
+
+    /**
+     * 权限访问路径
+     */
+    @Column(name = "privilege_uri",nullable = true)
+    private String privilegeUri;
+    
+    /**
+     * 节点层级,一级以1开始
+     */
+    @Column(name = "level",nullable = false)
+    private Integer level;
+    
+    @Column(name = "icon",nullable = true)
+    private String icon;
+    
+    @Column(name = "i18n",nullable = true)
+    private String i18n;
+    
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getSeq() {
+		return seq;
+	}
+
+	public void setSeq(Integer seq) {
+		this.seq = seq;
+	}
+
+	public PrivilegeType getPrivilegeType() {
+		return privilegeType;
+	}
+
+	public void setPrivilegeType(PrivilegeType privilegeType) {
+		this.privilegeType = privilegeType;
+	}
+
+	public String getPrivilegeUri() {
+		return privilegeUri;
+	}
+
+	public void setPrivilegeUri(String privilegeUri) {
+		this.privilegeUri = privilegeUri;
+	}
+
+	public String getParentCode() {
+		return parentCode;
+	}
+
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+
+	public Integer getLevel() {
+		return level;
+	}
+
+	public void setLevel(Integer level) {
+		this.level = level;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public String getI18n() {
+		return i18n;
+	}
+
+	public void setI18n(String i18n) {
+		this.i18n = i18n;
+	}
+
+
+}

+ 82 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/model/RolePrivilege.java

@@ -0,0 +1,82 @@
+package cn.com.qmth.stmms.biz.basic.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import cn.com.qmth.stmms.common.enums.Role;
+
+@Entity
+@Table(name = "b_role_privilege")
+public class RolePrivilege implements Serializable{
+
+    private static final long serialVersionUID = 8849214483955278647L;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue
+    private Integer id;
+    
+    @Column(name = "school_id",nullable = false)
+    private Integer schoolId;
+    
+    @Enumerated(EnumType.STRING)
+    @Column(name = "role_code",nullable = false)
+    private Role roleCode;
+
+    @Column(name = "privilege_code",nullable = false)
+    private String privilegeCode;
+
+    @Column(name = "enable",nullable = false)
+    private Boolean enable;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Role getRoleCode() {
+		return roleCode;
+	}
+
+	public void setRoleCode(Role roleCode) {
+		this.roleCode = roleCode;
+	}
+
+	public String getPrivilegeCode() {
+		return privilegeCode;
+	}
+
+	public void setPrivilegeCode(String privilegeCode) {
+		this.privilegeCode = privilegeCode;
+	}
+
+	public Boolean getEnable() {
+		return enable;
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+
+	public Integer getSchoolId() {
+		return schoolId;
+	}
+
+	public void setSchoolId(Integer schoolId) {
+		this.schoolId = schoolId;
+	}
+
+
+}

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/PrivilegeService.java

@@ -0,0 +1,12 @@
+package cn.com.qmth.stmms.biz.basic.service;
+
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.basic.model.Privilege;
+
+public interface PrivilegeService {
+
+	List<Privilege> getMenuPrivileges();
+
+
+}

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/RolePrivilegeService.java

@@ -0,0 +1,12 @@
+package cn.com.qmth.stmms.biz.basic.service;
+
+import java.util.Set;
+
+import cn.com.qmth.stmms.common.enums.Role;
+
+public interface RolePrivilegeService {
+
+	Set<String> getRoleCodes(Integer schoolId, Role role);
+
+
+}

+ 36 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/PrivilegeServiceImpl.java

@@ -0,0 +1,36 @@
+package cn.com.qmth.stmms.biz.basic.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.stmms.biz.basic.dao.PrivilegeDao;
+import cn.com.qmth.stmms.biz.basic.model.Privilege;
+import cn.com.qmth.stmms.biz.basic.service.PrivilegeService;
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.common.enums.PrivilegeType;
+
+@Service("privilegeService")
+public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements PrivilegeService {
+	private static List<Privilege> privileges = null;
+	private static Object lock = new Object();
+	@Autowired
+	private PrivilegeDao privilegeDao;
+
+	@Override
+	public List<Privilege> getMenuPrivileges() {
+		if (privileges == null) {
+			synchronized (lock) {
+				if (privileges == null) {
+					privileges = privilegeDao.findByPrivilegeTypeOrderByLevelAscSeqAsc(PrivilegeType.MENU);
+					if (privileges == null) {
+						privileges = new ArrayList<>();
+					}
+				}
+			}
+		}
+		return privileges;
+	}
+}

+ 47 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/RolePrivilegeServiceImpl.java

@@ -0,0 +1,47 @@
+package cn.com.qmth.stmms.biz.basic.service.impl;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.stmms.biz.basic.dao.RolePrivilegeDao;
+import cn.com.qmth.stmms.biz.basic.model.RolePrivilege;
+import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.common.enums.Role;
+
+@Service("rolePrivilegeService")
+public class RolePrivilegeServiceImpl extends BaseQueryService<RolePrivilege> implements RolePrivilegeService {
+	private static Map<String, Set<String>> privilegeCodes = new ConcurrentHashMap<>();
+	private static Object lock = new Object();
+	@Autowired
+	private RolePrivilegeDao rolePrivilegeDao;
+
+	@Override
+	public Set<String> getRoleCodes(Integer schoolId, Role role) {
+		String key = schoolId + "-" + role.name();
+		Set<String> set = privilegeCodes.get(key);
+		if (set == null) {
+			synchronized (lock) {
+				set = privilegeCodes.get(key);
+				if (set == null) {
+					set = new HashSet<>();
+					List<RolePrivilege> list = rolePrivilegeDao.findBySchoolIdAndRoleCodeAndEnable(schoolId, role,
+							true);
+					if (list != null) {
+						for (RolePrivilege r : list) {
+							set.add(r.getPrivilegeCode());
+						}
+					}
+					privilegeCodes.put(key, set);
+				}
+			}
+		}
+		return set;
+	}
+}

+ 30 - 0
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/PrivilegeType.java

@@ -0,0 +1,30 @@
+package cn.com.qmth.stmms.common.enums;
+
+public enum PrivilegeType {
+
+    MENU("菜单"),
+
+    BUTTON("按钮"),
+
+    ;
+    private String name;
+
+    PrivilegeType(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    
+
+	public static PrivilegeType getByName(String name) {
+        for (PrivilegeType r : PrivilegeType.values()) {
+            if (r.getName().equals(name)) {
+                return r;
+            }
+        }
+        return null;
+    }
+}

+ 37 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/PrivilegeController.java

@@ -0,0 +1,37 @@
+package cn.com.qmth.stmms.admin.basic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import cn.com.qmth.stmms.biz.basic.bean.TreeNode;
+import cn.com.qmth.stmms.common.controller.BaseController;
+
+@Controller
+@RequestMapping("/admin/basic/privilege")
+public class PrivilegeController extends BaseController {
+
+    @RequestMapping(value = "tagTreeselect", method = RequestMethod.GET)
+    public String tagTreeselect(Model model,HttpServletRequest request) {
+    	model.addAttribute("url","/admin/basic/privilege/tree");
+        return "modules/sys/tagTreeselect";
+    }
+    
+    @ResponseBody
+    @RequestMapping(value = "tree", method = RequestMethod.GET)
+    public List<TreeNode> tree(HttpServletRequest request) {
+    	List<TreeNode> ret=new ArrayList<>();
+    	ret.add(new TreeNode("a1", "a", "a1",false,2));
+        ret.add(new TreeNode("a2", "a", "a2",true,3));
+        ret.add(new TreeNode("a", "root_code", "a",true,2));
+        ret.add(new TreeNode("b", "root_code", "b",false,1));
+        return ret;
+    }
+}

+ 18 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java

@@ -1,16 +1,19 @@
 package cn.com.qmth.stmms.admin.interceptor;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
 import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
+import cn.com.qmth.stmms.biz.basic.service.PrivilegeService;
+import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
 import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 /**
  * Admin模块操作拦截器
@@ -24,6 +27,15 @@ public class AdminInterceptor extends SessionInterceptor {
 
     @Autowired
     private SubjectUserService subjectUserService;
+    
+    @Autowired
+    private RolePrivilegeService rolePrivilegeService;
+    
+    @Autowired
+    private PrivilegeService privilegeService;
+    
+    
+    
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -58,6 +70,8 @@ public class AdminInterceptor extends SessionInterceptor {
                 wu.setSubjectCodeSet(subjectUserService.findSubjectCode(wu.getId()));
             }
             RequestUtils.setWebUser(request, wu);
+            RequestUtils.setRolePrivilegeCodes(request, rolePrivilegeService.getRoleCodes(wu.getUser().getSchoolId(), wu.getRole()));
+            RequestUtils.setPrivileges(request, privilegeService.getMenuPrivileges());
             return wu;
         }
         return null;

+ 15 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/common/utils/RequestUtils.java

@@ -3,15 +3,17 @@ package cn.com.qmth.stmms.common.utils;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.List;
+import java.util.Set;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.com.qmth.stmms.biz.basic.model.Privilege;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.VersionInfo;
 
 /**
  * request临时参数存取
@@ -29,6 +31,10 @@ public class RequestUtils {
     private static final String REQUEST_VERSION_NAME="versionName";
     
     private static final String REQUEST_VERSION_DATE="versionDate";
+    
+    private static final String REQUEST_PRIVILEGES_KEY = "privileges";
+    
+    private static final String REQUEST_ROLE_PRIVILEGE_CODES_KEY = "role_privilege_codes";
 
     public static StmmsSession getSession(HttpServletRequest request) {
         Object obj = request.getAttribute(REQUEST_SESSION_KEY);
@@ -164,4 +170,12 @@ public class RequestUtils {
     public static void setLog(HttpServletRequest request, String content) {
         request.setAttribute(REQUEST_OPERATION_LOG_KEY, content);
     }
+    
+    public static void setRolePrivilegeCodes(HttpServletRequest request, Set<String> privilegeCodes) {
+        request.setAttribute(REQUEST_ROLE_PRIVILEGE_CODES_KEY, privilegeCodes);
+    }
+    
+    public static void setPrivileges(HttpServletRequest request, List<Privilege> privileges) {
+        request.setAttribute(REQUEST_PRIVILEGES_KEY, privileges);
+    }
 }

+ 14 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp

@@ -126,6 +126,19 @@
                         <div id="collapse1" class="accordion-body collapse ${firstMenu?'in':''}">
                             <div class="accordion-inner">
                                 <ul class="nav nav-list">
+                                <c:forEach items="${privileges}" var="privilege">
+                                <c:if test="${fn:contains(role_privilege_codes, privilege.code)}">
+                                	<c:if test="${privilege.code=='exam_score'}">
+                                		<c:if test="${forbiddenScore!=true}">
+	                                		<li><a href="${ctx}${privilege.privilegeUri}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
+	                                	</c:if>
+                                	</c:if>
+                                	<c:if test="${privilege.code!='exam_score'}">
+                                		<li><a href="${ctx}${privilege.privilegeUri}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
+                                	</c:if>
+                                </c:if>
+                                </c:forEach>
+                                <%-- 
                                     <c:if test="${web_user.schoolAdmin==true}">
                                         <li><a href="${ctx}/admin/user/list" target="mainFrame"><i class="icon-user"></i><span data-i18n-text="index.user">用户管理</span></a></li>
                                         <li><a href="${ctx}/admin/exam/list" target="mainFrame"><i class="icon-th-list"></i><span data-i18n-text="index.exam">考试管理</span></a></li>
@@ -163,7 +176,7 @@
                                         <li><a href="${ctx}/admin/exam/score" target="mainFrame"><i class="icon-search"></i><span data-i18n-text="index.score">成绩查询</span></a></li>
                                     	<li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame"><i class="icon-signal"></i><span data-i18n-text="index.report.total">总量分析</span></a></li>
                                       	<li><a href="${ctx}/admin/operation/log" target="mainFrame"><i class="icon-tasks"></i><span data-i18n-text="index.log">操作日志</span></a></li>
-                                    </c:if>
+                                    </c:if> --%>
                                     
                                     <c:set var="firstMenu" value="false"/>
                                 </ul>

+ 65 - 1
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -1157,4 +1157,68 @@ CREATE TABLE `eb_answer_card_subject`
   PRIMARY KEY (`id`),
   UNIQUE KEY `index1` (`exam_id`,`card_number`,`subjectCode`)
 )  ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4 COMMENT ='卡格式科目关联关系';
+  DEFAULT CHARSET = utf8mb4 COMMENT ='卡格式科目关联关系';
+  
+DROP TABLE IF EXISTS `b_privilege`;
+CREATE TABLE `b_privilege`
+(
+    `id`             int(11)      NOT NULL AUTO_INCREMENT,
+    `code`           varchar(50) NOT NULL,
+    `name`           varchar(50) NOT NULL,
+    `parent_code`    varchar(50)      NOT NULL,
+    `privilege_type` varchar(50) NOT NULL,
+    `privilege_uri`  varchar(50)  DEFAULT NULL,
+    `seq`            int(11)         NOT NULL,
+    `level`          int(11)         NOT NULL,
+    `icon` varchar(50)      DEFAULT NULL,
+    `i18n` varchar(50)      DEFAULT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_PRIVILEGE_01` (`code`),
+    KEY `IDX_PRIVILEGE_02` (`parent_code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+
+
+DROP TABLE IF EXISTS `b_role_privilege`;
+CREATE TABLE `b_role_privilege`
+(
+	`id`             int(11)      NOT NULL AUTO_INCREMENT,
+	`school_id` int(11) NOT NULL,
+    `role_code`    varchar(50) NOT NULL,
+    `privilege_code` varchar(50)      NOT NULL,
+    `enable`       tinyint(1)      NOT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_ROLE_PRIVILEGE_01`(`school_id`,`role_code`, `privilege_code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+  
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('user_list', '用户管理', 'root_code', 'MENU', '/admin/user/list', 10,1,'icon-user','index.user');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_list', '考试管理', 'root_code', 'MENU', '/admin/exam/list', 20,1,'icon-th-list','index.exam');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_student', '考生管理', 'root_code', 'MENU', '/admin/exam/student', 30,1,'icon-user','index.student');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_paper', '科目管理', 'root_code', 'MENU', '/admin/exam/paper', 40,1,'icon-book','index.paper');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_scan', '扫描进度', 'root_code', 'MENU', '/admin/exam/scan', 50,1,'icon-print','index.scan');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/exam/mark', 60,1,'icon-pencil','index.mark');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/exam/reject/list', 70,1,'icon-bookmark','index.reject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_problem_history', '问题试卷', 'root_code', 'MENU', '/admin/exam/problem/history', 80,1,'icon-tag','index.problem');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/exam/inspected/info', 90,1,'icon-flag','index.inspected');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_score', '成绩查询', 'root_code', 'MENU', '/admin/exam/score', 100,1,'icon-search','index.score');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_report_subject', '总量分析', 'root_code', 'MENU', '/admin/exam/reportSubject', 110,1,'icon-signal','index.report.total');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_report_subject_range', '科目分析', 'root_code', 'MENU', '/admin/exam/reportSubjectRange', 120,1,'icon-asterisk','index.report.subject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_check_answer', '数据检查', 'root_code', 'MENU', '/admin/exam/check/answer', 130,1,'icon-check','index.check');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('operation_log', '操作日志', 'root_code', 'MENU', '/admin/operation/log', 140,1,'icon-tasks','index.log');

+ 79 - 1
stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

@@ -73,4 +73,82 @@ INSERT INTO `eb_answer_card_subject` (
 FROM
 	eb_answer_card b
 WHERE
-	b.subject_code is not  NULL;
+	b.subject_code is not  NULL;
+	
+CREATE TABLE `b_privilege`
+(
+    `id`             int(11)      NOT NULL AUTO_INCREMENT,
+    `code`           varchar(50) NOT NULL,
+    `name`           varchar(50) NOT NULL,
+    `parent_code`    varchar(50)      NOT NULL,
+    `privilege_type` varchar(50) NOT NULL,
+    `privilege_uri`  varchar(50)  DEFAULT NULL,
+    `seq`            int(11)         NOT NULL,
+    `level`          int(11)         NOT NULL,
+    `icon` varchar(50)      DEFAULT NULL,
+    `i18n` varchar(50)      DEFAULT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_PRIVILEGE_01` (`code`),
+    KEY `IDX_PRIVILEGE_02` (`parent_code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+
+
+CREATE TABLE `b_role_privilege`
+(
+	`id`             int(11)      NOT NULL AUTO_INCREMENT,
+	`school_id` int(11) NOT NULL,
+    `role_code`    varchar(50) NOT NULL,
+    `privilege_code` varchar(50)      NOT NULL,
+    `enable`       tinyint(1)      NOT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_ROLE_PRIVILEGE_01`(`school_id`,`role_code`, `privilege_code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+  
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('user_list', '用户管理', 'root_code', 'MENU', '/admin/user/list', 10,1,'icon-user','index.user');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_list', '考试管理', 'root_code', 'MENU', '/admin/exam/list', 20,1,'icon-th-list','index.exam');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_student', '考生管理', 'root_code', 'MENU', '/admin/exam/student', 30,1,'icon-user','index.student');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_paper', '科目管理', 'root_code', 'MENU', '/admin/exam/paper', 40,1,'icon-book','index.paper');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_scan', '扫描进度', 'root_code', 'MENU', '/admin/exam/scan', 50,1,'icon-print','index.scan');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/exam/mark', 60,1,'icon-pencil','index.mark');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/exam/reject/list', 70,1,'icon-bookmark','index.reject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_problem_history', '问题试卷', 'root_code', 'MENU', '/admin/exam/problem/history', 80,1,'icon-tag','index.problem');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/exam/inspected/info', 90,1,'icon-flag','index.inspected');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_score', '成绩查询', 'root_code', 'MENU', '/admin/exam/score', 100,1,'icon-search','index.score');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_report_subject', '总量分析', 'root_code', 'MENU', '/admin/exam/reportSubject', 110,1,'icon-signal','index.report.total');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_report_subject_range', '科目分析', 'root_code', 'MENU', '/admin/exam/reportSubjectRange', 120,1,'icon-asterisk','index.report.subject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_check_answer', '数据检查', 'root_code', 'MENU', '/admin/exam/check/answer', 130,1,'icon-check','index.check');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('operation_log', '操作日志', 'root_code', 'MENU', '/admin/operation/log', 140,1,'icon-tasks','index.log');
+  
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'SCHOOL_ADMIN',p.`code`,1 from b_privilege p join b_school s;
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'SUBJECT_HEADER',p.`code`,1 from b_privilege p join b_school s   
+where p.`code` in('exam_mark','exam_reject_list','exam_problem_history'
+,'exam_inspected_info','exam_score','exam_report_subject','exam_report_subject_range');
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'INSPECTOR',p.`code`,1 from b_privilege p join b_school s   
+where p.`code` in('exam_inspected_info');
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'SCHOOL_VIEWER',p.`code`,1 from b_privilege p join b_school s   
+where p.`code` in('exam_score','exam_report_subject','operation_log');