Example #1
0
 /**
  * 编辑角色
  * @param int $id
  * @param string $name
  * @throws Exception
  */
 public function editRole($id, $data)
 {
     $this->check_permission(__FUNCTION__);
     $mysql = C('mysql');
     try {
         if (!empty($id) && is_numeric($id)) {
             if (!empty($data['pid']) && is_numeric($data['pid'])) {
                 if (!($pid = $mysql->fetchOne('id', 'permission', "id={$data['pid']}"))) {
                     throw new Exception('没有这样的权限');
                 }
                 $pa_data = array('rid' => $id, 'pid' => $pid['id']);
                 if (!$mysql->fetchOne('rid,pid', 'permission_assignment', "rid={$pa_data['rid']} AND pid={$pa_data['pid']}")) {
                     if ($mysql->insert('permission_assignment', $pa_data) === false) {
                         throw new Exception('赋予角色权限失败');
                     }
                 } else {
                     throw new Exception('该角色已有此权限,请勿重复添加');
                 }
             } elseif (!empty($data) && is_numeric($data)) {
                 $result = $mysql->fetchAll('rid,pid', 'permission_assignment', "rid={$id}");
                 foreach ($result as $value) {
                     $permissionAll[] = $mysql->fetchAll('id,pid', 'permission', "id={$value['pid']}");
                 }
                 foreach ($permissionAll as $value) {
                     foreach ($value as $val) {
                         $permissionAlls[] = $val;
                     }
                 }
                 $results = AllAssocPermission($permissionAlls, $data, $data);
                 foreach ($results as $value) {
                     if (!$mysql->delete('permission_assignment', "rid={$id} AND pid={$value['id']}")) {
                         jump('权限删除失败', "index.php?action=editRole&id={$id}");
                     }
                 }
                 jump('权限删除成功', "index.php?action=editRole&id={$id}", true);
                 return true;
             }
             if (isset($data['pid'])) {
                 unset($data['pid']);
             }
             $where = "id={$id}";
             if ($mysql->update('role', $data, $where)) {
                 jump('角色修改成功', 'pages/roleList.php', true);
             } else {
                 throw new Exception('角色修改失败');
             }
         }
     } catch (Exception $e) {
         jump($e->getMessage(), 'pages/roleList.php');
     }
 }
Example #2
0
/**
 * 取得特定PID下的所有子ID
 * @param unknown $pid
 */
function AllAssocPermission($data, &$pid, $id, &$result = array())
{
    foreach ($data as $value) {
        if ($value['pid'] == $pid) {
            $result[] = $value;
            AllAssocPermission($data, $value['id'], '', $result);
        }
        if ($value['id'] == $id) {
            $result[] = $value;
        }
    }
    return $result;
}