diff options
Diffstat (limited to 'core/helpers')
-rw-r--r-- | core/helpers/access.php | 46 | ||||
-rw-r--r-- | core/helpers/core_installer.php | 3 | ||||
-rw-r--r-- | core/helpers/core_menu.php | 9 |
3 files changed, 18 insertions, 40 deletions
diff --git a/core/helpers/access.php b/core/helpers/access.php index ad62595d..82325900 100644 --- a/core/helpers/access.php +++ b/core/helpers/access.php @@ -84,8 +84,7 @@ class access_Core { throw new Exception("@todo MISSING_ACCESS for $item->id"); } - $group_id = $group ? $group->id : 0; - return $access->__get("{$perm_name}_$group_id") === self::ALLOW; + return $access->__get("{$perm_name}_{$group->id}") === self::ALLOW; } /** @@ -96,25 +95,17 @@ class access_Core { * @return boolean */ public static function can($perm_name, $item) { - $user = Session::instance()->get("user", null); - if ($user) { - $access = ORM::factory("access_cache")->where("item_id", $item->id)->find(); - if (!$access) { - throw new Exception("@todo MISSING_ACCESS for $item->id"); - } + $access = ORM::factory("access_cache")->where("item_id", $item->id)->find(); + if (!$access) { + throw new Exception("@todo MISSING_ACCESS for $item->id"); + } - if ($access->view_0 == self::ALLOW) { + foreach (user::active()->groups as $group) { + if ($access->__get("{$perm_name}_{$group->id}") === self::ALLOW) { return true; } - foreach ($user->groups as $group) { - if ($access->__get("{$perm_name}_{$group->id}") === self::ALLOW) { - return true; - } - } - return false; - } else { - return self::group_can(group::EVERYBODY, $perm_name, $item); } + return false; } /** @@ -132,8 +123,7 @@ class access_Core { throw new Exception("@todo MISSING_ACCESS for $item->id"); } - $group_id = $group ? $group->id : 0; - $access->__set("{$perm_name}_$group_id", $value); + $access->__set("{$perm_name}_{$group->id}", $value); $access->save(); if ($perm_name =="view") { @@ -199,7 +189,6 @@ class access_Core { foreach (self::_get_all_groups() as $group) { self::_add_columns($perm_name, $group); } - self::_add_columns($perm_name, null); } /** @@ -212,7 +201,6 @@ class access_Core { foreach (self::_get_all_groups() as $group) { self::_drop_columns($name, $group); } - self::_drop_columns($name, null); $permission = ORM::factory("permission")->where("name", $name)->find(); if ($permission->loaded) { $permission->delete(); @@ -264,8 +252,6 @@ class access_Core { $field = "{$perm->name}_{$group->id}"; $access_cache->$field = $parent_access_cache->$field; } - $field = "{$perm->name}_0"; - $access_cache->$field = $parent_access_cache->$field; } $access_cache->save(); } @@ -302,9 +288,8 @@ class access_Core { * @return void */ private static function _drop_columns($perm_name, $group) { - $group_id = $group ? $group->id : 0; $db = Database::instance(); - $field = "{$perm_name}_$group_id"; + $field = "{$perm_name}_{$group->id}"; $db->query("ALTER TABLE `access_caches` DROP `$field`"); $db->query("ALTER TABLE `access_intents` DROP `$field`"); } @@ -317,11 +302,11 @@ class access_Core { * @return void */ private static function _add_columns($perm_name, $group) { - $group_id = $group ? $group->id : 0; $db = Database::instance(); - $field = "{$perm_name}_$group_id"; + $field = "{$perm_name}_{$group->id}"; $db->query("ALTER TABLE `access_caches` ADD `$field` TINYINT(2) NOT NULL DEFAULT 0"); $db->query("ALTER TABLE `access_intents` ADD `$field` BOOLEAN DEFAULT NULL"); + $db->query("UPDATE `access_intents` SET `$field` = 0 WHERE `item_id` = 1"); } /** @@ -337,9 +322,8 @@ class access_Core { public static function _update_access_view_cache($group, $item) { $access = ORM::factory("access_intent")->where("item_id", $item->id)->find(); - $group_id = $group ? $group->id : 0; $db = Database::instance(); - $field = "view_$group_id"; + $field = "view_{$group->id}"; // With view permissions, deny values in the parent can override allow values in the child, // so start from the bottom of the tree and work upwards overlaying negative on top of @@ -430,10 +414,8 @@ class access_Core { public static function _update_access_non_view_cache($group, $perm_name, $item) { $access = ORM::factory("access_intent")->where("item_id", $item->id)->find(); - $group_id = $group ? $group->id : 0; $db = Database::instance(); - $field = "{$perm_name}_$group_id"; - + $field = "{$perm_name}_{$group->id}"; // If the item's intent is DEFAULT, then we need to back up the chain to find the nearest // parent with an intent and propagate from there. diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php index d2c03948..8f24b659 100644 --- a/core/helpers/core_installer.php +++ b/core/helpers/core_installer.php @@ -108,10 +108,7 @@ class core_installer { $root->level = 1; $root->set_thumbnail(DOCROOT . "core/tests/test.jpg", 200, 150) ->save(); - access::add_item($root); - access::allow(0, "view", $root); - access::deny(0, "edit", $root); module::set_version("core", 1); } diff --git a/core/helpers/core_menu.php b/core/helpers/core_menu.php index e4a3dd92..69398302 100644 --- a/core/helpers/core_menu.php +++ b/core/helpers/core_menu.php @@ -32,9 +32,8 @@ class core_menu_Core { ->url(url::site("albums/1"))); $item = $theme->item(); - $user = Session::instance()->get("user", null); - if ($user) { - // @todo need to do a permission check here + + if (access::can("edit", $item)) { $menu->append( Menu::factory("submenu") ->id("options_menu") @@ -50,19 +49,19 @@ class core_menu_Core { ->label(_("Add album")) ->url(url::site("form/add/albums/$item->id")))); + $admin_menu = Menu::factory("submenu") ->id("admin_menu") ->label(_("Admin")); $menu->append($admin_menu); - // @todo need to do a permission check here $admin_menu->append( Menu::factory("dialog") ->id("edit") ->label(_("Edit")) ->url(url::site("form/edit/{$item->type}s/$item->id"))); - if ($user->admin) { + if (user::active()->admin) { $admin_menu->append( Menu::factory("link") ->id("site_admin") |