Расширение устанавливается при помощи composer.
Запустите в консоле команду
php composer.phar require ylab/yii2-administer "*"
или добавьте
"ylab/yii2-administer": "*"
в require
секцию файла composer.json
.
Далее необходимо прописать модуль в конфигурации вашего приложения:
'modules' => [
///
'admin' => [
'class' => \ylab\administer\Module::class,
'urlPrefix' => 'admin',
],
]
и добавить модуль в bootstrap
секцию конфигурации (необходимо для определения правил UrlManager
)
'bootstrap' => ['admin'],
Для добавления и последующего использования модели в модуле необходимо проделать следующие шаги:
- Сконфигурировать список моделей модуля (см. Конфигурация моделей модуля)
- К каждой модели из конфигурации присоединить поведение
CrudViewBehavior
(см. Использование поведения CrudViewBehavior) - Настроить фильтрацию в модели для поиска (можно двумя способами, см. Настройка фильтрации с помощью FilterQuery или Настройка продвинутой фильтрации)
- Настроить меню (см. Настройка меню)
- Открыть URL-адрес
http://app_url/module_id
- Модуль готов к работе
Для настройки доступа необходимо определить свойство access
в конфигурации модуля, которое должно иметь следующую структуру:
- defaultRole: строка, роль используемая для настройки фильтра контроля доступа
\yii\filters\AccessControl
. Применяется для crud и api контроллеров. - rules: массив, каждый элемент массива должен содержать url модели в качестве ключа и массив ролей в качестве значения.
Для проверки ролей будет использоваться вызов
\yii\web\User::can()
.
Пример конфигурации:
'access' => [
'defaultRole' => 'admin',
'rules' => [
'post' => ['contentManager'],
'post-tags' => ['admin'],
],
],
Дополнительно предлагается подключить возможность авторизации и выхода пользователя.
Чтобы подключить вывод кнопки выхода из панели, нужно реализовать интерфейс UserDataInterface
:
<?php
namespace common\components;
use common\models\LoginForm;
use Yii;
use ylab\administer\UserDataInterface;
class UserData implements UserDataInterface
{
private $loginForm;
public function getUserName()
{
return 'Ivan Petrov';
}
public function getAvatar()
{
return 'web/path/to/avatar';
}
public function getLoginForm()
{
if (is_null($this->loginForm)) {
$this->loginForm = Yii::createObject(LoginForm::class);
}
return $this->loginForm;
}
}
Чтобы подключить форму авторизации, метод getLoginForm()
должен
возвращать реализацию интерфейса LoginFormInterface
. При этом он обязательно должен быть
объектом yii\base\Model
. Пример:
<?php
namespace common\models;
use Yii;
use yii\base\Model;
use ylab\administer\LoginFormInterface;
class LoginForm extends Model implements LoginFormInterface
{
public $email;
public $password;
public $rememberMe = true;
public function rules()
{
// return rules
}
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
}
return false;
}
protected function getUser()
{
if ($this->user === null) {
$this->user = User::find()->byEmail($this->email)->one();
}
return $this->user;
}
public function getLoginAttribute()
{
return 'email';
}
public function getPasswordAttribute()
{
return 'password';
}
public function getRememberMeAttribute()
{
return 'rememberMe';
}
}
Для запуска тестов выполните следующую команду:
php vendor/bin/phpunit