#javascript #java #jquery #spring-mvc #datatables
#javascript #java #jquery #spring-mvc #таблицы данных
Вопрос:
В настоящее время я выполняю обработку ajax на стороне сервера с данными. Сценарий:
- Как и обычные операции с данными, т.е. сортировка-поиск-разбивка на страницы.
- один столбец (скажем, последний) с заголовком action будет содержать кнопки действий, такие как ADD / EDIT / DELETE / MARK / CACHE и т.д.
-
В зависимости от роли пользователя и его прав доступа пользователь может получить доступ к определенным кнопкам, которые назначаются администратором. Например,
У пользователя с ролью = 1 включена кнопка ДОБАВЛЕНИЯ-РЕДАКТИРОВАНИЯ.
У пользователя с ролью = 2 включена кнопка РЕДАКТИРОВАНИЯ-удаления
Когда пользовательская роль 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}
Комментарии:
1. Вы изучали или пробовали теги jsp, которые позволяли
if
бы создавать конструкции для отображения определенных кнопок? Это было бы на стороне сервера.2. У клиента всегда есть способы манипулировать DOM, поэтому лучше всего перепроверить роли при отправке обратно на сервер.
3. @ChiefTwoPencils: если мы добавим if else, то как это можно добавить в столбец разбивки на страницы на стороне сервера.