diff options
Diffstat (limited to 'engine/lib/access.php')
-rw-r--r-- | engine/lib/access.php | 91 |
1 files changed, 87 insertions, 4 deletions
diff --git a/engine/lib/access.php b/engine/lib/access.php index b39cb1455..73fb5e82c 100644 --- a/engine/lib/access.php +++ b/engine/lib/access.php @@ -12,6 +12,39 @@ */ /** + * Temporary class used to determing if access is being ignored + */ +class ElggAccess { + /** + * Bypass Elgg's access control if true. + * @var bool + */ + private $ignore_access; + + /** + * Get current ignore access setting. + * @return bool + */ + public function get_ignore_access() { + return $ignore_access; + } + + /** + * Set ignore access. + * + * @param $ignore bool true || false to ignore + * @return bool Previous setting + */ + public function set_ignore_access($ignore = true) { + $prev = $this->ignore_access; + $this->ignore_access = $ignore; + + return $prev; + } +} + + +/** * Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause. * * @uses get_access_array @@ -109,9 +142,9 @@ function get_access_array($user_id = 0, $site_id = 0, $flush = false) { } } - $is_admin = is_admin_user($user_id); + $ignore_access = elgg_is_ignore_access($user_id); - if ($is_admin == true) { + if ($ignore_access == true) { $tmp_access_array[] = ACCESS_PRIVATE; } @@ -239,10 +272,10 @@ function get_access_sql_suffix($table_prefix = "", $owner = null) { $owner = -1; } - $is_admin = is_admin_user($owner); + $ignore_access = elgg_get_ignore_access($owner); $access = get_access_list($owner); - if ($is_admin) { + if ($ignore_access) { $sql = " (1 = 1) "; } else if ($owner != -1) { $friends_bit = "{$table_prefix}access_id = " . ACCESS_FRIENDS . " @@ -742,6 +775,56 @@ function get_readable_access_level($entity_accessid){ return false; } +/** + * Set if entity access system should be ignored. + * + * @return bool Previous ignore_access setting. + */ +function elgg_set_ignore_access($ignore = true) { + $elgg_access = elgg_get_access_object(); + + return $elgg_access->set_ignore_access($ignore); +} + +/** + * Get current ignore access setting. + * + * @return bool + */ +function elgg_get_ignore_access() { + return elgg_get_access_object()->get_ignore_access(); +} + +/** + * Decides if the access system is being ignored. + * + * @return bool + */ +function elgg_is_ignore_access($user_guid = null) { + if (!$user_guid || $user_guid <= 0) { + $is_admin = false; + } else { + $is_admin = elgg_is_admin_user($user_guid); + } + + return ($is_admin || elgg_get_ignore_access()); +} + +/** + * Returns the ElggAccess object. + * + * @return ElggAccess + */ +function elgg_get_access_object() { + static $elgg_access; + + if (!$elgg_access) { + $elgg_access = new ElggAccess(); + } + + return $elgg_access; +} + global $init_finished; $init_finished = false; |