Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 06.11.2012 16:01:41

Разделение Auth

Есть два бандла: Member и Admin, оба зарегистрированы в /application/bundles.php

PHP
return array(
    
'member' => array(
        
'location' => 'member',
        
'handles'  => 'member',
        
'autoloads' => array(
            
'directories' => array(
                
'(:bundle)/models',
            ),
        ),
    ),
    
'admin' => array(
        
'location' => 'admin',
        
'handles'  => 'admin',
        
'autoloads' => array(
            
'directories' => array(
                
'(:bundle)/models',
            ),
        ),
    ),
);

Как реализовать раздельный Auth? Ибо оба эти бандла ездят по одной сессии. Технически могу на уровне флажка админа в табличке users и с проверкой на уровне фильтра, но очень не хочется. Хотелось бы совершенно разные login forms и Auth с ползанием в разные таблицы юзеров и админов. И соответственно независимые сессии.

Не в сети

#2 06.11.2012 17:36:15

Re: Разделение Auth

Если ты используешь драйвер eloquent, то именно флагом в таблице это и делается. Когда передаёшь в PHPAuth::attempt() массив с именем и паролем можешь добавить туда любые другие поля, которые будут проверятся как WHERE:

PHP
// auth/drivers/eloquent.php
public function attempt($arguments = array()) {
  ...
  foreach(
array_except($arguments, array('username''password''remember')) as $column => $val) {
    
$query->where($column'='$val);
  }

Не в сети

#3 06.11.2012 17:40:35

Re: Разделение Auth

А возможно ли разделить таблицы и соответственно использовать разные версии Auth?

Не в сети

#4 06.11.2012 17:47:17

Re: Разделение Auth

Я экспериментировал так:

www/bundles/admin/models/adminuser.php

PHP
<?

class AdminUser extends Eloquent {

    public static $timestamps = true;

    public static $table = 'users';// вот здесь можно назначить другую таблицу

    public function hello() {
        return AdminUser::take(1)->get();
    }
}

www/bundles/admin/start.php

PHP
<?

Autoloader::map(array(
    'AdminUser'    => path('bundle').'admin/models/adminuser.php',
));

Изменено oleg578 (06.11.2012 17:54:28)

Не в сети

#5 06.11.2012 17:53:54

Re: Разделение Auth

  1. А возможно ли разделить таблицы и соответственно использовать разные версии Auth?

Если не обязательно иметь доступ к авторизации и users, и admins, то можно наследовать драйвер:

PHP
class AdminAuthDriver extends Laravel\Auth\Drivers\Eloquent {
  protected function 
model() {
    return new 
AdminUser;
  }
}

В starts.php или в фильтре делать PHPConfig::set('auth.driver', ...). По умолчанию eloquent берёт модель из настройки auth.model.

Но я бы сделал одну таблицу с флагом — меньше проблем.

Не в сети

#6 06.11.2012 21:06:57

Re: Разделение Auth

Да, только наследовать не сам eloquent, а auth/drivers/driver.php - там всего три функции написать. После чего подсунуть его классу Auth функцией  Auth::extend. И этому драйверу указать уже свою модель. Можно, конечно, наверное и eloquent, только, думаю, наследовать driver будет идеологически вернее.

Не в сети

#7 06.11.2012 22:54:24

Re: Разделение Auth

спасибо, поэксперементирую

Не в сети

Подвал раздела