DataTables PHP根据用户权限动态编辑/删除链接

时间:2019-04-22 20:05:30

标签: javascript php datatables

我有一个数据表(Boostrap4),我需要在其中编辑和删除每一行的链接。我要弄清楚的是如何根据用户动态创建那些链接。我需要编辑和删除链接,以便仅对当前登录用户自己的项目(没有其他人)显示。

我知道我可以用PHP标记包装“ defaultContent”行并执行逻辑。我所缺少的是,是否有任何方法可以比较(例如)名字和姓氏,以查看该人是否与登录用户匹配,以控制哪些项目具有编辑/删除链接。

aoColumns: [
    { mData: 'first_name' } ,
    { mData: 'last_name' },
    { mData: 'note' },
    {
        data: null,
        className: "left",
        defaultContent: '<a style="display:inline-block;" href="edit.php" class="editor_edit">Edit</a> / <a href="delete.php" class="editor_remove">Delete</a>'
    }                   
]

1 个答案:

答案 0 :(得分:0)

如果您的“编辑/删除”链接允许用户修改后端数据,则无论如何要提交更改,您将需要对用户服务器端进行身份验证。

暂时,由于您需要为授权用户提供修改拥有的数据的可能性,因此您可能会生成基于用户的单个数据以供DataTable使用,因此每个行集都将有editable标志未设置,取决于用户的许可。

然后,您可以使用columns.render选项来呈现或不编辑/删除链接。

下面的示例演示了该方法:

//data supplied to DataTables, with 'editable' property
//dependant on user permissions, checked server-side
const srcData = [
  {fname: 'Steve', lname: 'Rogers', note: '', editable: true},
  {fname: 'Anthony', lname: 'Stark', note: '', editable: false},
  {fname: 'Peter', lname: 'Parker', note: '', editable: true},
  {fname: 'Thor', lname: 'Odinsson', note: '', editable: false},
];
//DataTables initialization with fourth column rendered
//as 'Edit/Delete' links visible for editable rows only
const dataTable = $('#mytable').DataTable({
  dom: 't',
  data: srcData,
  columns: [
    {title: 'First Name', data: 'fname'},
    {title: 'Last Name', data: 'lname'},
    {title: 'Note', data: 'note'},
    {title: '', data: null, render: (data, type, row, meta) => row.editable ? '<a style="display:inline-block;" href="edit.php" class="editor_edit">Edit</a> / <a href="delete.php" class="editor_remove">Delete</a>' : ''} 
  ]
});
<!doctype html>
<html>
<head>
  <script type="application/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script type="application/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
</head>
<body>
<table id="mytable"></table>
</body>
</html>