Как скрыть конкретные данные для отображения в обработке данных на стороне сервера

#javascript #java #jquery #spring-mvc #datatables

#javascript #java #jquery #spring-mvc #таблицы данных

Вопрос:

В настоящее время я выполняю обработку ajax на стороне сервера с данными. Сценарий:

  1. Как и обычные операции с данными, т.е. сортировка-поиск-разбивка на страницы.
  2. один столбец (скажем, последний) с заголовком action будет содержать кнопки действий, такие как ADD / EDIT / DELETE / MARK / CACHE и т.д.
  3. В зависимости от роли пользователя и его прав доступа пользователь может получить доступ к определенным кнопкам, которые назначаются администратором. Например,

    У пользователя с ролью = 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, то как это можно добавить в столбец разбивки на страницы на стороне сервера.