Parcourir la source

将总量分析及科目分析菜单进行合并,科组长角色菜单增加“分组管理”权限和“评卷员管理”:重置密码权限

xiatian il y a 10 mois
Parent
commit
f8b000ddca

+ 1 - 1
install/config.ini

@@ -1,5 +1,5 @@
 [app]
 [app]
-version=1.5.0
+version=1.5.1
 name=ÔÆÔľí
 name=ÔÆÔľí
 portal=http://localhost:8000/
 portal=http://localhost:8000/
 module=tomcat
 module=tomcat

+ 19 - 3
install/mysql/init/stmms_ft.sql

@@ -1369,10 +1369,26 @@ INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `pr
 VALUES ('exam_score', '成绩查询', 'root_code', 'MENU', '/admin/exam/score', 100,1,'icon-search','index.score');
 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`,`level`, `seq`)
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_score-export', '导出', 'exam_score', 'BUTTON', 2,1);
 VALUES ('exam_score-export', '导出', 'exam_score', 'BUTTON', 2,1);
+
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 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');
+VALUES ('exam_report_subject', '科目分析', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 110,1,'icon-asterisk','index.report.subject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-total', '总量分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubject', 10,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-range', '分段统计', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectRange', 20,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-college', '学院分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectCollege', 30,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-teacher', '任课老师分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectTeacher', 40,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-class', '班级分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectClass', 50,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-objective_question', '客观题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectQuestion', 60,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-subjective_question', '主观题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectQuestion', 70,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-group', '大题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectGroup', 80,2);
+
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 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');
 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`)
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)

+ 58 - 0
install/mysql/upgrade/1.5.1.sql

@@ -0,0 +1,58 @@
+-- 1.5.1
+USE `stmms_ft`;
+delete from b_privilege t where t.code in ('exam_report_subject','exam_report_subject_range');
+delete from b_role_privilege t where t.privilege_code in ('exam_report_subject','exam_report_subject_range');
+delete from b_role_privilege t where t.privilege_code in ('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');
+
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
+VALUES ('exam_report_subject', '科目分析', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 110,1,'icon-asterisk','index.report.subject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-total', '总量分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubject', 10,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-range', '分段统计', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectRange', 20,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-college', '学院分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectCollege', 30,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-teacher', '任课老师分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectTeacher', 40,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-class', '班级分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectClass', 50,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-objective_question', '客观题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectQuestion', 60,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-subjective_question', '主观题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectQuestion', 70,2);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`)
+VALUES ('exam_report_subject-group', '大题分析', 'exam_report_subject', 'PAGE', '/admin/exam/reportSubjectGroup', 80,2);
+
+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   
+where p.`code` in('exam_report_subject','exam_report_subject-total','exam_report_subject-range','exam_report_subject-college',
+'exam_report_subject-teacher','exam_report_subject-class'
+,'exam_report_subject-objective_question','exam_report_subject-subjective_question','exam_report_subject-group');
+
+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_report_subject','exam_report_subject-total','exam_report_subject-range','exam_report_subject-college',
+'exam_report_subject-teacher','exam_report_subject-class'
+,'exam_report_subject-objective_question','exam_report_subject-subjective_question','exam_report_subject-group');
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'COLLEGE_ADMIN',p.`code`,1 from b_privilege p join b_school s   
+where p.`code` in('exam_report_subject','exam_report_subject-total','exam_report_subject-range','exam_report_subject-college',
+'exam_report_subject-teacher','exam_report_subject-class'
+,'exam_report_subject-objective_question','exam_report_subject-subjective_question','exam_report_subject-group');
+
+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_report_subject','exam_report_subject-total');
+
+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   
+where p.`code` in('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'SUBJECT_HEADER',p.`code`,0 from b_privilege p join b_school s   
+where p.`code` in('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');
+
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'COLLEGE_ADMIN',p.`code`,0 from b_privilege p join b_school s   
+where p.`code` in('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete');

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

@@ -88,24 +88,44 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
 		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
-		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
+		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject-total','exam_report_subject-range','exam_report_subject-college',"
+				+ "'exam_report_subject-teacher','exam_report_subject-class'"
+				+ ",'exam_report_subject-objective_question','exam_report_subject-subjective_question','exam_report_subject-group')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
 		query.executeUpdate();
 		query.executeUpdate();
+		
+		sql = new StringBuilder();
+		sql.append("INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
+		sql.append(" SELECT s.id,'SUBJECT_HEADER',p.`code`,0 from b_privilege p join b_school s   ");
+		sql.append(" where p.`code` in('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete')");
+		sql.append(" and s.id="+schoolId);
+		query = entityManager.createNativeQuery(sql.toString());
+		query.executeUpdate();
 	}
 	}
 	private void initCollegeAdminPrivilege(Integer schoolId) {
 	private void initCollegeAdminPrivilege(Integer schoolId) {
 		StringBuilder sql = new StringBuilder();
 		StringBuilder sql = new StringBuilder();
 		sql.append("INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append("INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append(" SELECT s.id,'COLLEGE_ADMIN',p.`code`,1 from b_privilege p join b_school s   ");
 		sql.append(" SELECT s.id,'COLLEGE_ADMIN',p.`code`,1 from b_privilege p join b_school s   ");
-		sql.append(" where p.`code` in('exam_mark','exam_mark-mark','exam_mark-group','exam_mark-marker','exam_mark-trial','exam_mark-library'");;
+		sql.append(" where p.`code` in('exam_mark','exam_mark-mark','exam_mark-group','exam_mark-marker','exam_mark-trial','exam_mark-library'");
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_mark-library-inspect','exam_mark-library-reject','exam_mark-arbitrate','exam_mark-quality','exam_reject_list'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_reject_list-paper','exam_reject_list-history','exam_problem_history','exam_problem_history-reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_problem_history-batch_reset'");
 		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
 		sql.append(" ,'exam_inspected_info','exam_inspected_info-info','exam_inspected_info-list','exam_inspected_info-next_round'");
-		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject_range')");
+		sql.append(" ,'exam_score','exam_score-export','exam_report_subject','exam_report_subject-total','exam_report_subject-range','exam_report_subject-college',"
+				+ "'exam_report_subject-teacher','exam_report_subject-class'"
+				+ ",'exam_report_subject-objective_question','exam_report_subject-subjective_question','exam_report_subject-group')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
 		query.executeUpdate();
 		query.executeUpdate();
+		
+		sql = new StringBuilder();
+		sql.append("INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
+		sql.append(" SELECT s.id,'COLLEGE_ADMIN',p.`code`,0 from b_privilege p join b_school s   ");
+		sql.append(" where p.`code` in('exam_mark-group-add','exam_mark-group-edit','exam_mark-group-reset_edit','exam_mark-group-delete')");
+		sql.append(" and s.id="+schoolId);
+		query = entityManager.createNativeQuery(sql.toString());
+		query.executeUpdate();
 	}
 	}
 	private void initInspectorPrivilege(Integer schoolId) {
 	private void initInspectorPrivilege(Integer schoolId) {
 		StringBuilder sql = new StringBuilder();
 		StringBuilder sql = new StringBuilder();
@@ -120,7 +140,7 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		StringBuilder sql = new StringBuilder();
 		StringBuilder sql = new StringBuilder();
 		sql.append(" INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append(" INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)");
 		sql.append(" SELECT s.id,'SCHOOL_VIEWER',p.`code`,1 from b_privilege p join b_school s   ");
 		sql.append(" SELECT s.id,'SCHOOL_VIEWER',p.`code`,1 from b_privilege p join b_school s   ");
-		sql.append(" where p.`code` in('exam_score','exam_report_subject','operation_log')");
+		sql.append(" where p.`code` in('exam_score','exam_report_subject','exam_report_subject-total','operation_log')");
 		sql.append(" and s.id="+schoolId);
 		sql.append(" and s.id="+schoolId);
 		Query query = entityManager.createNativeQuery(sql.toString());
 		Query query = entityManager.createNativeQuery(sql.toString());
 		query.executeUpdate();
 		query.executeUpdate();

+ 5 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markerList.jsp

@@ -280,7 +280,7 @@
         <input id="btnRelease" class="btn" type="button" value="回收" onclick="goRelease()"/>
         <input id="btnRelease" class="btn" type="button" value="回收" onclick="goRelease()"/>
         &nbsp;
         &nbsp;
         <input id="btnTaskCount" class="btn" type="button" value="设置评卷数" onclick="goTaskCount()"/>
         <input id="btnTaskCount" class="btn" type="button" value="设置评卷数" onclick="goTaskCount()"/>
-        <c:if test="${web_user.schoolAdmin==true }">
+        <c:if test="${web_user.schoolAdmin==true||web_user.subjectHeader==true }">
             &nbsp;
             &nbsp;
             <input id="btnResetPassword" class="btn" type="button" value="重置密码" onclick="goResetPassword()"/>
             <input id="btnResetPassword" class="btn" type="button" value="重置密码" onclick="goResetPassword()"/>
         </c:if>
         </c:if>
@@ -346,7 +346,10 @@
                     <a href="javascript:void(0)" class="release-button" data-id="${marker.id}">回收</a>
                     <a href="javascript:void(0)" class="release-button" data-id="${marker.id}">回收</a>
                     <a href="javascript:void(0)" class="task-button" data-id="${marker.id}"
                     <a href="javascript:void(0)" class="task-button" data-id="${marker.id}"
                        onclick="showTaskWin('${marker.id}');">设置评卷数</a>
                        onclick="showTaskWin('${marker.id}');">设置评卷数</a>
-                    <a href="javascript:void(0)" class="reSetPassword-button" data-id="${marker.id}"
+                    
+                </c:if>
+                <c:if test="${(web_user.schoolAdmin==true||web_user.subjectHeader==true) && marker.reseting==false}">
+                <a href="javascript:void(0)" class="reSetPassword-button" data-id="${marker.id}"
                        onclick="reSetPassword('${marker.id}');">重置密码</a>
                        onclick="reSetPassword('${marker.id}');">重置密码</a>
                 </c:if>
                 </c:if>
             </td>
             </td>

+ 26 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubject.jsp

@@ -11,7 +11,32 @@
 </head>
 </head>
 <body>
 <body>
 	<ul class="nav nav-tabs">
 	<ul class="nav nav-tabs">
-		<li class="active"><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">课程总量统计</a></li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li  class="active"><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
+    </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
+    </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
+	</c:if>
 	</ul>
 	</ul>
 	<form id="searchForm" action="${ctx}/admin/exam/reportSubject" method="post" class="breadcrumb form-search">
 	<form id="searchForm" action="${ctx}/admin/exam/reportSubject" method="post" class="breadcrumb form-search">
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>

+ 20 - 3
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectClass.jsp

@@ -16,16 +16,33 @@
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-    <li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
+    <li  class="active"><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectClass" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectClass" method="post" class="breadcrumb form-search">
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>

+ 21 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectCollege.jsp

@@ -16,18 +16,33 @@
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-	<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a>
-    </li>
-    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a>
-    </li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
+    <li  class="active"><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectCollege" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectCollege" method="post" class="breadcrumb form-search">
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>

+ 22 - 7
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectGroup.jsp

@@ -15,18 +15,33 @@
     }</style>
     }</style>
 </head>
 </head>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-	<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
-    <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a>
-    </li>
-    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a>
-    </li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
+    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
+    <li  class="active"><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectGroup" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectGroup" method="post" class="breadcrumb form-search">
     <div>
     <div>
         <label  data-i18n-text="report.group.subject">科目:</label>
         <label  data-i18n-text="report.group.subject">科目:</label>

+ 21 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectQuestion.jsp

@@ -16,18 +16,33 @@
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-	<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
-    <li id="objectiveLi"><a
-            href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
+    <li id="objectiveLi"><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
-    <li id="subjectiveLi"><a
-            href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
+    <li id="subjectiveLi"><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectQuestion" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectQuestion" method="post" class="breadcrumb form-search">
     <input id="objective" name="objective" value="${query.objective}" type="hidden"/>
     <input id="objective" name="objective" value="${query.objective}" type="hidden"/>
     <div>
     <div>

+ 19 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectRange.jsp

@@ -17,16 +17,33 @@
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li class="active"><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectRange" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectRange" method="post" class="breadcrumb form-search">
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
     <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
     <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>

+ 20 - 3
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectTeacher.jsp

@@ -16,16 +16,33 @@
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
-	<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-total')}">
+		<li><a href="${ctx}/admin/exam/reportSubject" data-i18n-text="report.subject">总量统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-range')}">
+		<li><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
+		</c:if>
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-college')}">
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}" data-i18n-text="report.college">学院分析</a></li>
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-teacher')}">
+    <li  class="active"><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}" data-i18n-text="report.teacher">任课老师分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-class')}">
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}" data-i18n-text="report.class">班级分析</a></li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-objective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true" data-i18n-text="report.question.objective">客观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-subjective_question')}">
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false" data-i18n-text="report.question.subjective">主观题分析</a>
     </li>
     </li>
+    </c:if>
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_report_subject-group')}">
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
     <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}" data-i18n-text="report.group">分组统计分析</a></li>
-</ul>
+	</c:if>
+	</ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectTeacher" method="post" class="breadcrumb form-search">
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectTeacher" method="post" class="breadcrumb form-search">
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
 	    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>