Форум программистов, компьютерный форум, киберфорум
PHP: Yii, Yii2
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
36 / 34 / 12
Регистрация: 04.06.2014
Сообщений: 220
1

Yii2. Можно ли указать behaviors для модуля?

05.02.2018, 12:28. Показов 4631. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть модуль modules/admin/Module.php
PHP
1
2
3
4
5
    class Module extends \yii\base\Module {
        public function init() {
            parent::init(); // TODO: Change the autogenerated stub
        }
    }
Каким образом можно задать разрешения ему, чтобы например ограничить доступ определенным пользователям?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2018, 12:28
Ответы с готовыми решениями:

Yii2 указать базовый путь для всех ссылок в вьювсе
Проблема интеграции. Есть шаблон с таким кодом <img src='/images/test.jpg'> Естественно,...

Простой многостраничный сайт на Yii2 без БД, есть ли быстрый старт для новичка в Yii2?
Привет! Решил смастерить сайт на Yii2, прочел вчера вводный раздел документации - основа...

Можно ли указать регион для ПС?
Скажите, пожалуста, а можно как нибудь указать регион для поисковых систем, например что сайт...

Можно ли указать для одной тени Box-shadow два цвета 50% для одного цвета 50% для другого?
Можно ли указать для одной тени два цвета 50% для одного цвета 50% для другого?

4
Особый статус
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
05.02.2018, 13:30 2
Возможно хорошим вариантом будет ограничение именно к контроллерам, т.е вы создаете BaseModuleController унаследовав от yii\web\Controller, там уже задаете правила, а все остальные контроллеры унаследовать от BaseModuleController с переопределенными правилами, типа:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function behaviors()
{
    return \yii\helpers\ArrayHelper::merge(parent::behaviors(), [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'signup'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                ],
            ],
    ]);
}
Это более гибко в том смысле, что для некоторых контроллеров и экшенов можно задавать немного иные правила контроля доступа.

Иначе же можете прямо в модуле определить метод behaviors().
Access Control Filter (ACF) is a simple authorization method implemented as yii\filters\AccessControl which is best used by applications that only need some simple access control. As its name indicates, ACF is an action filter that can be used in a controller or a module. While a user is requesting to execute an action, ACF will check a list of access rules to determine if the user is allowed to access the requested action.
Authorization
1
36 / 34 / 12
Регистрация: 04.06.2014
Сообщений: 220
07.02.2018, 12:34  [ТС] 3
Цитата Сообщение от FloppyDisc Посмотреть сообщение
Иначе же можете прямо в модуле определить метод behaviors().
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
 
namespace app\modules\admin;
use yii\filters\auth\QueryParamAuth;
 
class Module extends \yii\base\Module {
    public function beforeAction($action) {
        return parent::beforeAction($action); 
    }
 
    public function behaviors() {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => QueryParamAuth::className(),
            'tokenParam' => 'access-token',
        ];
        $behaviors['corsFilter'] = [
            'class' => \yii\filters\Cors::className(),
            'cors' => [
                'Origin' => ['*'],
                'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
                'Access-Control-Request-Headers' => ['*'],
                'Access-Control-Allow-Credentials' => true,
                'Access-Control-Max-Age' => 86400,
            ],
        ];
        return $behaviors;
    }
 
    public function init() {
        parent::init(); // TODO: Change the autogenerated stub
    }
 
}

Так и сделал, но всплыла другая проблема. Теперь я хочу ограничить доступ к контроллерам модуля определенным ролям. Хочу добавить в beforeAction модуля проверку на тип пользователя.
Хотел написать что то вроде
PHP
1
2
3
4
5
 public function beforeAction($action) {
        if(Yii::$app->user->identity->type != 'admin') 
             return false;
        return parent::beforeAction($action); 
    }
Но Yii::$app->user->identity на момент проверки null. То есть метод проверяющий аторизацию на данный момент ещё не отработал и user->identity ещё не получен, что делаю не так?

PS. Я знаю что есть такая штука как RBAC и что она наверное решит большую часть проблем, но хотелось узнать есть ли альтернатива.
0
Особый статус
623 / 221 / 164
Регистрация: 18.11.2015
Сообщений: 1,086
07.02.2018, 15:10 4
Цитата Сообщение от shaman92 Посмотреть сообщение
но хотелось узнать есть ли альтернатива.
Есть, как я уже говорил сделать все в контроллерах, это более гибко, тем более я смотрю у вас модуль админки(наверн), так что сделайте базовый AdminController там определите базовый метод behaviors(), при необходимости и beforeAction() а все остальные контроллеры модуля унаследуйте от AdminController. При такой реализации вы так же сможете для любого экшена или контроллера задать свои специфические behaviors() со связкой родительского или полностью переопределить. Я уже приводил пример, еще раз покажу:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
IndexControler extends AdminComtroller{
 
public function behaviors()
{
    return \yii\helpers\ArrayHelper::merge(parent::behaviors(), [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout', 'signup'],
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login', 'signup'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'],
                        'roles' => ['@'],
                    ],
                ],
            ],
    ]);
}
 
}
0
36 / 34 / 12
Регистрация: 04.06.2014
Сообщений: 220
07.02.2018, 16:03  [ТС] 5
Спасибо
0
07.02.2018, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2018, 16:03
Помогаю со студенческими работами здесь

Можно ли указать более одного языка для неюникодовых программ?
В региональных настройках можно указать один язык для отображения текста в программах, не...

Behaviors в logout
Доброе утро всем знатокам Yii2. Всего неделю изучаю Yii, есть вопрос. В предустановленном примере...

Можно ли создать форму в модуле без создания нового модуля для неё
Можно ли создать форму в модуле без создания нового модуля для неё?

Как указать тип из одного модуля в другом
Все здравствуйте. Столкнулся с небольшой проблемой, в одном модуле я объявляю все переменные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru