Revize 1634
Přidáno uživatelem Ondřej Fibich před asi 12 roky(ů)
freenetis/branches/testing/system/libraries/ORM.php | ||
---|---|---|
* @param string $permission
|
||
* @return boolean
|
||
*/
|
||
public function check_permission ($permission)
|
||
public function check_permission($permission)
|
||
{
|
||
static $permissions = NULL;
|
||
static $cache = NULL;
|
||
|
||
if ($permissions == NULL)
|
||
if (!isset($cache[$permission]))
|
||
{
|
||
$cache[$permission] = false;
|
||
$db_name = Config::get('db_name');
|
||
$permissions = array();
|
||
$grants = $this->db->query("SHOW GRANTS FOR CURRENT_USER");
|
||
|
||
foreach ($this->db->query("SHOW GRANTS FOR CURRENT_USER") as $row)
|
||
foreach ($grants as $grant)
|
||
{
|
||
$values = array_values(arr::from_object ($row));
|
||
$values = array_values(arr::from_object($grant));
|
||
|
||
if ((($pos = strpos($values[0], ' ON `'.$db_name.'`.*')) === FALSE) &&
|
||
($pos = strpos($values[0], ' ON *.*')) === FALSE)
|
||
... | ... | |
continue;
|
||
}
|
||
|
||
if (substr($values[0], 6, $pos-6) == 'ALL PRIVILEGES')
|
||
if (($permissions = substr($values[0], 6, $pos-6)) == 'ALL PRIVILEGES')
|
||
{
|
||
return true;
|
||
$cache[$permission] = true;
|
||
break;
|
||
}
|
||
|
||
$permissions = arr::tolower(explode(', ', $permissions));
|
||
|
||
if ($permissions == 'ALL PRIVILEGES' ||
|
||
in_array(strtolower($permission), $permissions))
|
||
if (in_array(strtolower($permission), $permissions))
|
||
{
|
||
return true;
|
||
$cache[$permission] = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
return $cache[$permission];
|
||
}
|
||
|
||
/**
|
Také k dispozici: Unified diff
Opravy:
- dalsi opetovna snaha o opravu kontroly prav v databazi