我已经设置了这样的数据库表:
table: group
id name subGroupOf
1 grandparent NULL
2 parent 1
3 child 2
这是我在php中尝试做的事情:
当用户访问页面时,该页面告诉auth()函数他们需要'子'权限。因为'child'是'parent'的子组,所以两个组的成员都应该获得权限。但是,父母是“祖父母”的子群体,因此所有三个群体的成员都应该有权访问。
由于嵌套了多少个子组没有限制,我知道我需要一个循环。但我总是画一个空白。
我知道需要检查该组是否为subGroupOf,如果是,则验证父组。这是我到目前为止所做的:
// Get group of current user
$group = mysqli_query($cxn,'SELECT group FROM user WHERE id='.$userID);
// Compare group to permissions
if($group == $permissions)
return TRUE;
// Check if group is a sub group
$subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$group.'"');
if($subGroupOf == NULL)
{
// Wrong permissions
}
// Check if the parent group matches permissions
if($subGroupOf == $permissions)
return TRUE;
不知何故,我需要循环最后一部分,并在到达
时停止$subGroupOf == NULL
我对编程很新,所以我还在弄清楚逻辑......有什么想法吗?我不需要为我编写的所有内容(无论如何都要对代码进行总结),我只需要帮助搞清楚结构..
答案 0 :(得分:0)
您可以通过检查子组的递归函数执行此操作,并继续执行直到“subGroupOf”id为NULL。
例如:
function getTopParentGroup($groupId, $cxn) {
$subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$groupId.'"');
//There is no parent, just return the group
if($subGroupOf == NULL)
{
return $group;
}
//A parent has been found, continue...
getTopParentGroup($subGroupOf, $cxn);
}
答案 1 :(得分:0)
另一种方法,但你还需要一个递归函数:
功能
function getGroupHierarchy($groupId, $cxn)
{
$groupArray = array();
//Push the group to the array..
$groupArray[] = $groupId;
//Get the parent id of this group
$subGroupOf = mysqli_query($cxn,'SELECT subGroupOf FROM group WHERE id="'.$groupId.'"');
//There is no parent, just return the array.
if($subGroupOf == NULL)
{
return $groupArray;
}
//Continue checking the parent group(s).
getGroupHierarchy($subGroupOf, $cxn);
}
调用该函数并检查权限:
// Get group of current user
$groupId = mysqli_query($cxn,'SELECT group FROM user WHERE id='.$userID);
$allGroups = getGroupHierarchy($groupId, $cxn);
//Compare each group to permissions.
foreach($groupArray as $group)
{
if($group == $permissions)
return TRUE;
}