/** * 编辑角色 * @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'); } }
/** * 取得特定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; }