目前我在做datatable服务器端的ajax处理。场景是:
根据用户角色及其访问权限,用户可以访问由admin分配的特定按钮。例如,
Role = 1的用户启用了ADD-EDIT按钮
Role = 2的用户启用了EDIT-DELETE按钮
当用户登录1或2时,用户只能查看和访问这些按钮。
如果我将访问信息从JSP(从会话对象获取信息)脚本标记传递到主javascript函数并使用If-Else条件就可以完成。但是访问信息会暴露给客户端。
要求:我想在服务器端(Java-Spring)动态创建按钮或隐藏用户的逻辑。
到目前为止,这是我的尝试:的script.js
function getDatatable(id, url, columns) {
globalDatatable = $('#' + id).DataTable({
lengthChange : false,
processing : true,
serverSide : true,
order : [ [ 0, 'asc' ] ],
paging : true,
fnDrawCallback : function(oSettings) {
},
ajax : {
url : url,
type : "GET",
datatype : "application/json",
data : function(d) {
return JSON.stringify(d);
}
},
initComplete : function(settings, json) {
},
columns : columns,
});
}
function getIpRangeDatatable(id,url){
var columns=[];
columns.push({ data: "ipid" ,name:"ipid"});
columns.push({ data: "startIp",name:"startIp" });
columns.push({ data: "endIp",name:"endIp" });
columns.push({ data: "allow",name:"allow" });
columns.push({ data: "roleName" ,name:"roleName"});
columns.push({ data: "description" ,name:"description"});
columns.push({ data: "loginId",name:"loginId" });
columns.push({ data:function(o1){ return parseDateTime(o1.fromDate); },name:"fromDate" });
columns.push({ data: function(o1){ return parseDateTime(o1.toDate); },name:"toDate" });
columns.push({ data: function(o1){
var buttons=[{name:"Edit", action:"doOperations(2,12,3,"+o1.ipid+")"}
,{name:"Delete", action:"doOperations(3,12,4,"+o1.ipid+")"}];
return getActionMenus(buttons);
}});
getDatatable(id,url,columns);
}
function getActionMenus(buttons) {
var menu= "<div class='btn-group'>"+
"<button type='button' class='btn btn-default'><span class='glyphicon glyphicon-share' aria-hidden='true'></span> Action</button>"+
"<button type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'> <span class='caret'></span> <span class='sr-only'>Toggle Dropdown</span> </button>"+
"<ul class='dropdown-menu dropdown-menu-right'>";
for(var i in buttons ){
menu+="<li><a href='javascript:"+buttons[i].action+"' data-title='IpRange'><span class='glyphicon glyphicon-edit' aria-hidden='true'></span>"+ buttons[i].name+"</a></li>";
}
menu+="</ul></div>";
return menu;
}
test.jsp的
<%
String ctxPath = request.getContextPath() + "/";
String id = "ipRange_" + Utils.getUUID();
%>
<div class="wrapper-content-area-pad">
<div class="panel panel-primary flat-panel">
<div class="panel-heading flat-panel">IP Range Details</div>
<div class="panel-body">
<a href="javascript:doGenericOperations(2,12,3,0)"class="btn btn-default" data-title="IpRange">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>Add IP</a>
<table id="<%=id%>"
class="table compact table-striped table-bordered table-action" cellspacing="0"
width="100%">
<thead>
<tr>
<th>IPId</th>
<th>Start IP</th>
<th>End IP</th>
<th>Allow Rule</th>
<th>Type of User</th>
<th>Description</th>
<th>Username</th>
<th>From Date</th>
<th>To Date</th>
<th>Actions</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
<script>
$(document).ready(function(){
getIpRangeDatatable('<%=id%>', 'appAdmin/s/manage_ip/datatable/1');
});
</script>
JSON数据样本:
{"draw":1,"recordsFiltered":6,"data":[{"ipid":11,"startIp":"172.16.0.0","endIp":"172.16.255.255","allow":0,"allowNull":false,"description":"Faculty ip range ","roomId":0,"roomIdNull":false,"fromDate":null,"toDate":1474889095000,"userId":9295,"userIdNull":false,"roleName":"Faculty","userRoleId":4,"userRoleIdNull":false,"loginId":"shylaja.sharath@pes.edu"},{"ipid":12,"startIp":"10.10.101.10","endIp":"10.10.101.10","allow":0,"allowNull":false,"description":"Tech team Ubuntu","roomId":0,"roomIdNull":false,"fromDate":null,"toDate":null,"userId":0,"userIdNull":true,"roleName":"Student","userRoleId":3,"userRoleIdNull":false,"loginId":null},{"ipid":13,"startIp":"172.16.0.1000","endIp":"172.16.255.255","allow":0,"allowNull":false,"description":"Faculty ip range ","roomId":0,"roomIdNull":false,"fromDate":null,"toDate":null,"userId":0,"userIdNull":true,"roleName":null,"userRoleId":0,"userRoleIdNull":true,"loginId":null},{"ipid":18,"startIp":"172.16.174.40","endIp":"172.16.174.40","allow":1,"allowNull":false,"description":"Faculty IP Range","roomId":12,"roomIdNull":false,"fromDate":null,"toDate":null,"userId":0,"userIdNull":true,"roleName":"Faculty","userRoleId":4,"userRoleIdNull":false,"loginId":null},{"ipid":20,"startIp":"192.168.1.12","endIp":"192.168.3.35","allow":0,"allowNull":false,"description":"","roomId":0,"roomIdNull":false,"fromDate":null,"toDate":null,"userId":0,"userIdNull":true,"roleName":null,"userRoleId":0,"userRoleIdNull":true,"loginId":null},{"ipid":21,"startIp":"1.1.1.1","endIp":"192.168.1.255","allow":0,"allowNull":false,"description":"","roomId":0,"roomIdNull":true,"fromDate":null,"toDate":null,"userId":0,"userIdNull":true,"roleName":null,"userRoleId":0,"userRoleIdNull":true,"loginId":null}],"recordsTotal":6}