sleeping-owl / admin

Administrative interface builder for Laravel
http://sleeping-owl.github.io/
MIT License
503 stars 259 forks source link

Как заменить модель \SleepingOwl\AdminAuth\Entities\Administrator на обычного пользователя с установленными правами? #296

Open AlexRadch opened 8 years ago

AlexRadch commented 8 years ago

Я хочу чтобы обычный пользователь мог быть администратором, а не создавать для этого отдельных пользователей в отдельной таблице. Я использую Zizaco/entrust https://github.com/Zizaco/entrust для назначения ролей и прав обычным пользователям. Соответсвенно я подправил admin.php чтобы использовать доступ через роли и права следующим образом:

    //'middleware'              => ['admin.auth'],
    'middleware'              => ['permission:admin::dashboard'],
//...
    'auth'                    => [
//      'model' => '\SleepingOwl\AdminAuth\Entities\Administrator',
//      'rules' => [
//          'username' => 'required',
//          'password' => 'required',
//      ]
        'model' => \App\Employee::class,
        'rules' => [
            'email' => 'required',
            'password' => 'required',
        ]
    ],

middleware срабатывает и дает доступ к панели администратора, но дальше возвращается исключение Trying to get property of non-object (View: C:\htdocs\laravel\webserver\www\vendor\sleeping-owl\admin\src\views\default\_partials\user.blade.php)

Я так понимаю идет обращение к объекту равному нулю. Как это исправить?

AlexRadch commented 8 years ago

Я заменил AdminAuthManager на обычного AuthManager добавив следущий код в AppServiceProvider.php

    public function register()
    {
        $this->app->booted(function($app1)
        {
            // Replace SleepingOwl AdminAuthManager on usual AuthManager
            $app1->offsetUnset('admin.auth');
            $app1->singleton('admin.auth', function($app2)
            {
                return $app2['auth'];
            });
        });
    }

Но все равно еще остались две проблемы:

  1. Вместо имени пользователя отображается текст admin Я предлагаю во вьюхе user.blade.php код AdminAuth::user()->name заменить на AdminAuth::user()->shortName() или на AdminAuth::user()->displayName() и уже внутри каждая модель может по разному реализовывать это свойство.
  2. Не работает форма авторизации. Хотя указал правильную модель в файле admin.php
    'middleware'              => ['admin.auth'],
    'auth'                    => [
        'model' => \App\Employee::class,
        'rules' => [
            'email' => 'required',
            'password' => 'required',
        ]
    ],

Не важно что в форме вводить (правильные или нет значения ) - она просто зацикливается не сообщая никай ошибки при неверных значениях и не авторизуя при вверных.

AngryGantz commented 8 years ago

Спасибо за наводку -)) Я пользуюсь Sentinel, сменил middleware и логин-форма отдельная в админку вобще не нужна - в мидлваре проверяем роль, если админ то пущаем, если нет хоть на главную редирект, хоть на 404, хоть на общую логин-форму авторизации на сайте. а вот в _partials\user.blade.php просто костыль воткнул -(( поменял AdminAuth::user()->displayName() на сентинеловский Sentinel::check()->first_name. Понятно что не по феншую совсем и после обновления снова лезть, но работает зато...