您的位置:首页 > Web前端 > JavaScript

jsp权限配置、初始化、查询控制的解决方案

2014-09-02 13:42 274 查看

问题提出:



实现方式:将专业和年级用"@23@"的形式存数据库,判断like则有权限

CREATE TABLE `notice` (
	`notice_id` INT(11) NOT NULL AUTO_INCREMENT,
	`content` LONGTEXT NULL COMMENT '内容' COLLATE 'utf8_bin',
	`create_date` DATETIME NOT NULL COMMENT '创建时间',
	`user_id` INT(11) NOT NULL COMMENT '创建人主键',
	`user_name` VARCHAR(50) NOT NULL COMMENT '创建人名字' COLLATE 'utf8_bin',
	`publish_date` DATETIME NOT NULL COMMENT '发布时间',
	`title` VARCHAR(300) NOT NULL COMMENT '标题' COLLATE 'utf8_bin',
	`visible_orgs` VARCHAR(300) NULL DEFAULT NULL COMMENT '可见机构' COLLATE 'utf8_bin',
	`visible_type` SMALLINT(6) NOT NULL COMMENT '1:按机构选择(机构下的教师和学生都可见) 2年级下对应专业学生可见(毕业离校通知和其他通知处理方式不一致)',
	`visible_grades` VARCHAR(300) NULL DEFAULT NULL COMMENT '添加年级作为通知权限控制,保存年级的id,@隔开' COLLATE 'utf8_bin',
	`type_id` INT(11) NOT NULL COMMENT '通知类型',
	`pk_id` INT(11) NULL DEFAULT NULL,
	PRIMARY KEY (`notice_id`)
)
COLLATE='utf8_bin'
ENGINE=InnoDB

SELECT DISTINCT N.notice_id,N.title,N.publish_date,N.user_id,N.user_name,N.visible_type,N.visible_orgs, IFNULL(NR.isread,0) AS isread
FROM (
SELECT *
FROM commonuser.notice
WHERE type_id= 14 AND publish_date >= '2014-09-01 00:00:00')N
LEFT JOIN commonuser.notice_user_record NR ON (NR.notice_id=N.notice_id AND NR.info_id = 738)
WHERE (N.visible_type=1 AND N.visible_orgs LIKE '%@21@%') -- 组织机构
   OR (N.visible_type = 2 AND N.visible_orgs LIKE '%@25@%' AND N.visible_grades LIKE '%@7@%') -- 年级和专业
ORDER BY publish_date DESC
 


页面:

<input type="hidden" id="visibleOrgs_in" value="${notice.visibleOrgs}" />
	<input type="hidden" id="visibleGrades_in" value="${notice.visibleGrades}" />
<pre name="code" class="html">


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="limit" uri="http://www.yineng.com/limit"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
%>
<div style="margin-left: 120px;">
<table cellpadding="8" cellspacing="8">
    <tr>
        <c:forEach var="x" step="1" items="${requestScope.gradeList}" varStatus="status">
            <td>
                
                <td valign="top"><input type="checkbox" name="grade_ids"
                    value="${x.gradeId }" onclick="allSel_specity(this)" />
                </td>
                <td valign="top">
                         ${x.gradeName }
                </td>
                </td>
        </c:forEach>
    </tr>
</table>
<table cellpadding="8" cellspacing="8">
    <tr>
        <c:forEach var="x" step="1" items="${requestScope.voList}" varStatus="status">
            <td valign="top">
                <input type="checkbox" name="specSubiect_ids" value="${x.speSubjectId }" onclick="allSel_speSubject(this,'${x.speSubjectId }')" />
            </td>
            <td valign="top">
                ${x.speSubjectName }</br>
                <c:forEach var="y" step="1" items="${x.specityVos}" varStatus="sta">
                    <input id="specityIds${y.specityId }" type="checkbox" name="specityIds${x.speSubjectId }" value="${y.specityId }" /> ${y.specityName }</br>
                </c:forEach>
            </td>
            <c:if test="${(status.index+1) % 5 == 0 }"> 每5个则换行
                </tr>
                <tr>
                <td height="10px;"></td>
                </tr>
                <tr>
            </c:if>
        </c:forEach>
    </tr>
</table>
</div>
<script type="text/javascript">
$(function(){
    //初始化年级
    var visibleType=$("input[type=radio][name=visibleType]:checked").val();
    if(visibleGrades != undefined && visibleGrades != null &&  visibleGrades != ""){
        $("input[name ='grade_ids']").each(function(){
            if(("@"+$(this).val()+"@").indexOf(visibleGrades) != -1){
                $(this).attr("checked",'true');// 初始化已经选择的选项
            }
        });
    }
    
    var visibleType=$("input[type=radio][name=visibleType]:checked").val();
    if(visibleOrgs != undefined && visibleOrgs != null &&  visibleOrgs != ""){
        visibleOrgs = visibleOrgs.substring(1,visibleOrgs.length-1);
        var orgs = visibleOrgs.split("@");
        for(var i = 0;i<orgs.length;i++){
            var ch_id = "specityIds" + orgs[i];
            $("#" + ch_id).attr("checked",'true');// 初始化已经选择的选项
        }
    }
    load_button_css();  //加载btn样式
});
</script>


主要的js方法


function allSel_speSubject(obj,id){
	var ischeck = obj.checked;
	var ch_name = "specityIds" + id;
	if(ischeck){
	    $("[name="+ch_name+"]").attr("checked",'true');//全选 
	} else{
		$("[name="+ch_name+"]").removeAttr("checked");//取消全选
	}
}
function allSel_specity(obj){
	var ischeck = obj.checked;
	if(ischeck){
		 $("[name=specSubiect_ids]").attr("checked",'true');//全选 
		 $("input[name^='specityIds']").attr("checked",'true');//全选 
		 
	} else{   
		if($("input[type=checkbox][name=grade_ids]:checked").length == 0){
			$("[name=specSubiect_ids]").removeAttr("checked");//取消全选
			$("input[name^='specityIds']").removeAttr("checked");//取消全选
		} 
	}
}

//保存通知的可见范围
saveOrUpdateVisiblePerson = function(){
    var visibleType=$("input[type=radio][name=visibleType]:checked").val();//可见类型 是机构还是年级+专业
    var orgIds = ''; //组织机构 
    var specityIds = '';//专业的选择id
    var gradeIds='';//年级的选择项id 
    var s = '@';
    if(visibleType ==2){

        $("input[name *='grade_ids']:checked").each(function(){ //获取选择年级
            if($(this).attr('checked')){
                s += $(this).attr('value')+"@";
            }
        });
        if(s.length <= 1){
            $.ligerDialog.alert('请选择年级!','信息', 'error');
            return;
        }
        gradeIds = s;  //选择的年级 
        
        s = '@';
        $("input[name *='specityIds']:checked").each(function(){ //获取选择专业
            if($(this).attr('checked')){
                s += $(this).attr('value')+"@";
            }
        });
        if(s.length <= 1){
            $.ligerDialog.alert('请选择专业!','信息', 'error');
            return;
        }
        specityIds = s;//选择的专业
    }else{ 
        $("input[name *='org_ids']:checked").each(function(){ //获取选择的组织机构
            if($(this).attr('checked')){
                s += $(this).attr('value')+"@";
            }
        });
        if(s.length <= 1){
            $.ligerDialog.alert('请选择组织机构!','信息', 'error');
            return;
        }
        orgIds = s;
    }

    $.ligerDialog.waitting('请稍候...');
      $.ajax({
            type: "POST",
            url: '<%=path%>/notice/notice!saveOrUpdateVisiblePerson.action',
            dataType:"html",
            data:{
              'noticeId':noticeId,
              'visibleType':visibleType,
              'orgIds':orgIds,
              'gradeIds':gradeIds,
              'specityIds':specityIds
          },
            success: function(response){ 
               $.ligerDialog.closeWaitting();
               backIndexPage();
               $.ligerDialog.alert('操作成功!','信息', 'success');
            },
            error:function(){
               $.ligerDialog.closeWaitting();
               $.ligerDialog.alert('加载失败!','信息', 'error');
            } 
      });
}; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: