예제 #1
0
파일: acl.php 프로젝트: Tommar/vino2
 public static function getRuleSet($cid = '')
 {
     static $rulesData = null;
     $my = empty($cid) ? JFactory::getUser() : JFactory::getUser($cid);
     if (!isset($rulesData[$my->id])) {
         $db = EasyBlogHelper::db();
         $config = EasyBlogHelper::getConfig();
         $rulesets = new stdClass();
         $rulesets->rules = new stdClass();
         // @Task: Retrieve rules
         $rules = EasyBlogACLHelper::getRules('id');
         if (!empty($my->id)) {
             $rulesets->id = $my->id;
             $rulesets->name = $my->name;
             $rulesets->group = isset($my->usertype) ? $my->usertype : '';
             // @Task: Load default values.
             foreach ($rules as $rule) {
                 $rulesets->rules->{$rule->action} = (int) $rule->default;
             }
             // @Task: Retreive assigned rulesets for this particular user.
             // Assigned rulesets always have higher precedence
             $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($my->id) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('assigned');
             $db->setQuery($query);
             $result = $db->loadObjectList();
             if (count($result) > 0) {
                 $result = array();
                 $result[] = $db->loadObjectList();
                 $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets);
             } else {
                 $result = array();
                 if (EasyBlogHelper::getJoomlaVersion() >= '1.6') {
                     // get user's joomla usergroups ids.
                     $groupIds = '';
                     $query = 'SELECT `group_id` FROM `#__user_usergroup_map` WHERE `user_id` = ' . $db->Quote($my->id);
                     $db->setQuery($query);
                     $groupIds = $db->loadResultArray();
                     $groups = array();
                     // get the last index.
                     for ($i = 0; $i < count($groupIds); $i++) {
                         $grpId =& $groupIds[$i];
                         $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($grpId) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group');
                         $db->setQuery($query);
                         $groups[] = $db->loadObjectList();
                     }
                     // Allow explicit overrides in the groups
                     // If user A is in group A (allow) and group B (not allowed) , user A should be allowed
                     $result = array();
                     foreach ($groups as $group) {
                         foreach ($group as $rule) {
                             if (!isset($result[0][$rule->acl_id])) {
                                 $result[0][$rule->acl_id] = new stdClass();
                             }
                             if (isset($result[0][$rule->acl_id]->acl_id) && $result[0][$rule->acl_id]->status != '1' || !isset($result[0][$rule->acl_id]->acl_id)) {
                                 $result[0][$rule->acl_id]->acl_id = $rule->acl_id;
                                 $result[0][$rule->acl_id]->status = $rule->status;
                             }
                         }
                     }
                 } else {
                     $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($my->gid) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group');
                     $db->setQuery($query);
                     $result[] = $db->loadObjectList();
                 }
                 $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets);
             }
         } else {
             if (EasyBlogHelper::getJoomlaVersion() >= '1.6') {
                 // Cannot rely on JComponentHelper::getParams( 'com_users' )->get( 'guest_usergroup' ) because Joomla 3.2.0 onwards always returns 13.
                 $user = JFactory::getUser();
                 $tmp = $user->getAuthorisedGroups();
                 $gid = $tmp[0];
                 $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($gid) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group');
                 $db->setQuery($query);
                 $groups[] = $db->loadObjectList();
                 // Allow explicit overrides in the groups
                 // If user A is in group A (allow) and group B (not allowed) , user A should be allowed
                 $result = array();
                 foreach ($groups as $group) {
                     foreach ($group as $rule) {
                         if (!isset($result[0][$rule->acl_id])) {
                             $result[0][$rule->acl_id] = new stdClass();
                         }
                         if (isset($result[0][$rule->acl_id]->acl_id) && $result[0][$rule->acl_id]->status != '1' || !isset($result[0][$rule->acl_id]->acl_id)) {
                             $result[0][$rule->acl_id]->acl_id = $rule->acl_id;
                             $result[0][$rule->acl_id]->status = $rule->status;
                         }
                     }
                 }
                 $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets);
             } else {
                 $rulesets->id = '0';
                 $rulesets->name = 'guest';
                 $rulesets->group = 'none';
                 foreach ($rules as $rule) {
                     $rulesets->rules->{$rule->action} = 0;
                 }
             }
         }
         $rulesData[$my->id] = $rulesets;
     }
     return $rulesData[$my->id];
 }