コード例 #1
0
ファイル: accounts.php プロジェクト: rundiz/fuel-start
 /**
  * can i add or edit account
  *
  * @param array $level_groups target level groups
  * @return boolean
  */
 public function canIAddEditAccount($level_groups)
 {
     if (!is_array($level_groups) || is_array($level_groups) && empty($level_groups)) {
         return false;
     }
     // get account id
     $cookie = $this->getAccountCookie('admin');
     if (!isset($cookie['account_id'])) {
         return false;
     }
     $account_id = $cookie['account_id'];
     unset($cookie);
     // get site id and set table prefix for site
     $site_id = \Model_Sites::getSiteId(false);
     $table_site_prefix = '';
     if ($site_id != '1') {
         $table_site_prefix = $site_id . '_';
     }
     unset($site_id);
     // get current user level group priority
     $my_level = \DB::select()->from($table_site_prefix . 'account_level')->as_object('\\Model_AccountLevel')->join($table_site_prefix . 'account_level_group', 'LEFT')->on($table_site_prefix . 'account_level_group.level_group_id', '=', $table_site_prefix . 'account_level.level_group_id')->where('account_id', $account_id)->order_by('level_priority', 'ASC')->execute();
     $my_level = $my_level->current();
     if ($my_level == null || $my_level->count() == '0') {
         return false;
     }
     $my_level_priority = $my_level->account_level_group->level_priority;
     // loop check each target level group.
     foreach ($level_groups as $level_group_id) {
         // get target level group priority
         $target_level = \Model_AccountLevelGroup::query()->where('level_group_id', $level_group_id)->get_one();
         if ($target_level == null) {
             return false;
         }
         // check if target level is higher than current user level (priority of target is less than my)
         if ($target_level->level_priority < $my_level_priority) {
             return false;
         }
     }
     unset($level_group_id, $my_level, $my_level_priority, $target_level);
     // all checked pass!
     return true;
 }