我将在我的php网站上实现ACL(访问控制列表)。
在我的系统中,用户有角色和权限的总和。
主要算法如下:
permissions = (permissions_by_role + permission_for_user) - user_banned_permission
所以我有三个数组并从数据库中获取这些值。
对于第一部分,我使用此
$permissions = array_unique(array_merge($permission_by_role, $permission_by_user));
如何从权限数组中删除我的禁止权限? 现在我有这两个数组:
$permissions and $permission_banned_for_user[]
答案 0 :(得分:2)
听起来像是array_diff的完美用例:
$permissions = array_diff($permissions, $permission_banned_for_user);
答案 1 :(得分:0)
您需要的是array_diff() - 将array1与array2进行比较并返回差异。
$allowed = array('view', 'create', 'edit', 'delete', 'add');
$banned = array('add', 'delete');
$result = array_diff($allowed, $banned);
print_r($result); //Array ( [0] => view [1] => create [2] => edit )
答案 2 :(得分:0)
如果我正确了解情况,您可以使用array_diff()函数轻松完成此操作。看看这里:http://www.php.net/manual/en/function.array-diff.php
这将需要2个数组并返回数组1中的所有元素,而不是数组2中的所有元素。