Админка с несколькими администраторами

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
linudu
Сообщения: 1
Зарегистрирован: 2019.03.25, 12:47

Админка с несколькими администраторами

Сообщение linudu »

Суть такова. Есть один главный админ и от 0 до .. второстепенных админов.
У главного админа должны быть все панели второстепенных админов. У каждого второстепенного админа только своя панель (например свой раздел сайта).
Помогите, пожалуйста, советом. Каким образом лучше и легче реализовать такую схему?
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Админка с несколькими администраторами

Сообщение leonenco »

RBAC - ROLE BASED ACCESS CONTROL, разберитесь с ним, посмотрите туториалы, вам все сразу станет ясно
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Админка с несколькими администраторами

Сообщение leonenco »

linudu писал(а): 2019.03.25, 12:51 Суть такова. Есть один главный админ и от 0 до .. второстепенных админов.
У главного админа должны быть все панели второстепенных админов. У каждого второстепенного админа только своя панель (например свой раздел сайта).
Помогите, пожалуйста, советом. Каким образом лучше и легче реализовать такую схему?
как разберетесь что куда, назначайте пользователям роли (мид адим, супер админ и тд на ваше усмотрение) и в завизсимости от их роли в акшионе парсите контент который вывести.
Shotty
Сообщения: 36
Зарегистрирован: 2019.03.02, 19:30

Re: Админка с несколькими администраторами

Сообщение Shotty »

linudu писал(а): 2019.03.25, 12:51 Суть такова. Есть один главный админ и от 0 до .. второстепенных админов.
У главного админа должны быть все панели второстепенных админов. У каждого второстепенного админа только своя панель (например свой раздел сайта).
Помогите, пожалуйста, советом. Каким образом лучше и легче реализовать такую схему?
ещё можно сделать в БД isAdmin, null кинуть для обычного юзера, а далее по уровням например, 1 - первый уровень админки и ему давай определённые возможности и тд, главного админа можно сделать или уровнем каким ты хочешь, или сделать так же в БД например senior_admin. Как-то так можно ещё.
Shotty
Сообщения: 36
Зарегистрирован: 2019.03.02, 19:30

Re: Админка с несколькими администраторами

Сообщение Shotty »

zxczxc12 писал(а): 2019.03.29, 01:28 Все проблемы решает
https://github.com/dektrium/yii2-user
https://github.com/dektrium/yii2-rbac
yii2-rbac как его юзать вообще?
zxczxc12
Сообщения: 161
Зарегистрирован: 2013.01.24, 21:16

Re: Админка с несколькими администраторами

Сообщение zxczxc12 »

Shotty писал(а): 2019.03.29, 17:25
zxczxc12 писал(а): 2019.03.29, 01:28 Все проблемы решает
https://github.com/dektrium/yii2-user
https://github.com/dektrium/yii2-rbac
yii2-rbac как его юзать вообще?
У этой шляпы есть превосходный веб-интерфейс для бекенда

http://prntscr.com/n4s8ce

Я при установке приложения прописываю все основные роля :

Код: Выделить всё

<?php
namespace console\controllers\commands;

use Yii;
use yii\console\Controller;
use yii\helpers\Console;

class RbacController extends Controller
{
    public function actionIndex()
    {
        Console::output("\nSet RBAC rules");

        $auth = Yii::$app->authManager;
        $auth->removeAll();

        /**
         * Определение ролей
         */
        $user = $auth->createRole('user');
        $user->description = 'Роль пользователя';
        $auth->add($user);

        $moderator = $auth->createRole('moderator');
        $moderator->description = 'Роль модератора';
        $auth->add($moderator);
        $auth->addChild($moderator, $user);

        $content_manager = $auth->createRole('content-manager');
        $content_manager->description = 'Роль контент-менеджера';
        $auth->add($content_manager);
        $auth->addChild($content_manager,$user);

        $admin = $auth->createRole('admin');
        $admin->description = 'Роль администратора';
        $auth->add($admin);

        //  Инициирование учетной записи userId=1 роли админа
        $auth->assign($admin, 1);
        /*---------------------------------------------------------------*/


        /**
         * System settings
         */
        $systemDirAccess = $auth->createPermission('systemDirAccess');
        $systemDirAccess->description = 'Доступ к каталогу "Система"';
        $auth->add($systemDirAccess);

        $systemSettingsAccess = $auth->createPermission('systemSettingsAccess');
        $systemSettingsAccess->description = 'Доступ к "Системные настройки"';
        $auth->add($systemSettingsAccess);

        $robotsAccess = $auth->createPermission('robots');
        $robotsAccess->description = 'Доступ к "Файл robots.txt"';
        $auth->add($robotsAccess);

        $systemLogAccess = $auth->createPermission('systemLog');
        $systemLogAccess->description = 'Доступ к "System log"';
        $auth->add($systemLogAccess);

        $loginLogAccess = $auth->createPermission('loginLog');
        $loginLogAccess->description = 'Доступ к "Login log"';
        $auth->add($loginLogAccess);

        /*------------------------------------------*/

        /**
         * Transaction log
         */
        $transactionLogAccess = $auth->createPermission('transactionLog');
        $transactionLogAccess->description = 'Доступ к "Лог транзакци"';
        $auth->add($transactionLogAccess);
        /*------------------------------------------*/

        /**
         * Content management settings
         */
        $contentDirAccess = $auth->createPermission('contentDirAccess');
        $contentDirAccess->description = 'Доступ к каталогу "Контент"';
        $auth->add($contentDirAccess);

        $customPagesAccess = $auth->createPermission('customPages');
        $customPagesAccess->description = 'Доступ к "Страницы"';
        $auth->add($customPagesAccess);

        $articlesAccess = $auth->createPermission('articles');
        $articlesAccess->description = 'Доступ к "Статьи"';
        $auth->add($articlesAccess);

        $newsAccess = $auth->createPermission('news');
        $newsAccess->description = 'Доступ к "Новости"';
        $auth->add($newsAccess);
        /*------------------------------------------*/

        /**
         * TranslateManager access
         */
        $translateManager = $auth->createPermission('translateManager');
        $translateManager->description = 'Доступ к переводу контента';
        $auth->add($translateManager);
        /*------------------------------------------*/

        /**
         * FirewallManager access
         */
        $firewallManager = $auth->createPermission('firewall');
        $firewallManager->description = 'Доступ к модулю Firewall';
        $auth->add($firewallManager);
        /*------------------------------------------*/


        $usersManagerAccess = $auth->createPermission('usersManager');
        $usersManagerAccess->description = 'Доступ к "Пользователи"';
        $auth->add($usersManagerAccess);

        /**
         * SupportManager access
         */
        $supportAccess = $auth->createPermission('support');
        $supportAccess->description = 'Доступ к "Техподдержка"';
        $auth->add($supportAccess);
        /*------------------------------------------*/


        $adminPanelAccess = $auth->createPermission('adminPanelAccess');
        $adminPanelAccess->description = 'Доступ к залогиниванию в админскую панель';
        $auth->add($adminPanelAccess);


        /**
         * Определение разрешений
         */

        //  Разрешения для роли admin
        $auth->addChild($admin, $content_manager);
        $auth->addChild($admin, $user);
        $auth->addChild($admin, $moderator);
        $auth->addChild($admin, $adminPanelAccess);

        //  Разрешения для роли content-manager
        $auth->addChild($content_manager, $adminPanelAccess);
        $auth->addChild($content_manager, $translateManager);
        $auth->addChild($content_manager, $contentDirAccess);
        $auth->addChild($content_manager, $articlesAccess);

        //  Назначение роли пользователя
        $auth = Yii::$app->authManager;
        $auth->assign($auth->getRole(\common\models\User::ROLE_ADMIN), 2);



        Console::output('Success! RBAC roles has been added.');
    }
}
далее в коде где нужно проверить имеет ли права пользователь например модератора то :

...

if(Yii::$app->user->can('moderator')){
print "вы модератор";
}
Shotty
Сообщения: 36
Зарегистрирован: 2019.03.02, 19:30

Re: Админка с несколькими администраторами

Сообщение Shotty »

zxczxc12 писал(а): 2019.03.29, 21:46
Shotty писал(а): 2019.03.29, 17:25
zxczxc12 писал(а): 2019.03.29, 01:28 Все проблемы решает
https://github.com/dektrium/yii2-user
https://github.com/dektrium/yii2-rbac
yii2-rbac как его юзать вообще?
У этой шляпы есть превосходный веб-интерфейс для бекенда

http://prntscr.com/n4s8ce

Я при установке приложения прописываю все основные роля :

Код: Выделить всё

<?php
namespace console\controllers\commands;

use Yii;
use yii\console\Controller;
use yii\helpers\Console;

class RbacController extends Controller
{
    public function actionIndex()
    {
        Console::output("\nSet RBAC rules");

        $auth = Yii::$app->authManager;
        $auth->removeAll();

        /**
         * Определение ролей
         */
        $user = $auth->createRole('user');
        $user->description = 'Роль пользователя';
        $auth->add($user);

        $moderator = $auth->createRole('moderator');
        $moderator->description = 'Роль модератора';
        $auth->add($moderator);
        $auth->addChild($moderator, $user);

        $content_manager = $auth->createRole('content-manager');
        $content_manager->description = 'Роль контент-менеджера';
        $auth->add($content_manager);
        $auth->addChild($content_manager,$user);

        $admin = $auth->createRole('admin');
        $admin->description = 'Роль администратора';
        $auth->add($admin);

        //  Инициирование учетной записи userId=1 роли админа
        $auth->assign($admin, 1);
        /*---------------------------------------------------------------*/


        /**
         * System settings
         */
        $systemDirAccess = $auth->createPermission('systemDirAccess');
        $systemDirAccess->description = 'Доступ к каталогу "Система"';
        $auth->add($systemDirAccess);

        $systemSettingsAccess = $auth->createPermission('systemSettingsAccess');
        $systemSettingsAccess->description = 'Доступ к "Системные настройки"';
        $auth->add($systemSettingsAccess);

        $robotsAccess = $auth->createPermission('robots');
        $robotsAccess->description = 'Доступ к "Файл robots.txt"';
        $auth->add($robotsAccess);

        $systemLogAccess = $auth->createPermission('systemLog');
        $systemLogAccess->description = 'Доступ к "System log"';
        $auth->add($systemLogAccess);

        $loginLogAccess = $auth->createPermission('loginLog');
        $loginLogAccess->description = 'Доступ к "Login log"';
        $auth->add($loginLogAccess);

        /*------------------------------------------*/

        /**
         * Transaction log
         */
        $transactionLogAccess = $auth->createPermission('transactionLog');
        $transactionLogAccess->description = 'Доступ к "Лог транзакци"';
        $auth->add($transactionLogAccess);
        /*------------------------------------------*/

        /**
         * Content management settings
         */
        $contentDirAccess = $auth->createPermission('contentDirAccess');
        $contentDirAccess->description = 'Доступ к каталогу "Контент"';
        $auth->add($contentDirAccess);

        $customPagesAccess = $auth->createPermission('customPages');
        $customPagesAccess->description = 'Доступ к "Страницы"';
        $auth->add($customPagesAccess);

        $articlesAccess = $auth->createPermission('articles');
        $articlesAccess->description = 'Доступ к "Статьи"';
        $auth->add($articlesAccess);

        $newsAccess = $auth->createPermission('news');
        $newsAccess->description = 'Доступ к "Новости"';
        $auth->add($newsAccess);
        /*------------------------------------------*/

        /**
         * TranslateManager access
         */
        $translateManager = $auth->createPermission('translateManager');
        $translateManager->description = 'Доступ к переводу контента';
        $auth->add($translateManager);
        /*------------------------------------------*/

        /**
         * FirewallManager access
         */
        $firewallManager = $auth->createPermission('firewall');
        $firewallManager->description = 'Доступ к модулю Firewall';
        $auth->add($firewallManager);
        /*------------------------------------------*/


        $usersManagerAccess = $auth->createPermission('usersManager');
        $usersManagerAccess->description = 'Доступ к "Пользователи"';
        $auth->add($usersManagerAccess);

        /**
         * SupportManager access
         */
        $supportAccess = $auth->createPermission('support');
        $supportAccess->description = 'Доступ к "Техподдержка"';
        $auth->add($supportAccess);
        /*------------------------------------------*/


        $adminPanelAccess = $auth->createPermission('adminPanelAccess');
        $adminPanelAccess->description = 'Доступ к залогиниванию в админскую панель';
        $auth->add($adminPanelAccess);


        /**
         * Определение разрешений
         */

        //  Разрешения для роли admin
        $auth->addChild($admin, $content_manager);
        $auth->addChild($admin, $user);
        $auth->addChild($admin, $moderator);
        $auth->addChild($admin, $adminPanelAccess);

        //  Разрешения для роли content-manager
        $auth->addChild($content_manager, $adminPanelAccess);
        $auth->addChild($content_manager, $translateManager);
        $auth->addChild($content_manager, $contentDirAccess);
        $auth->addChild($content_manager, $articlesAccess);

        //  Назначение роли пользователя
        $auth = Yii::$app->authManager;
        $auth->assign($auth->getRole(\common\models\User::ROLE_ADMIN), 2);



        Console::output('Success! RBAC roles has been added.');
    }
}
далее в коде где нужно проверить имеет ли права пользователь например модератора то :

...

if(Yii::$app->user->can('moderator')){
print "вы модератор";
}
а зачем такой велосипед писать, если можно сделать поле в таблице юзера роль, и там прописать, типо user,admin, moderator и тд, и в зависимости от роли давать доступ к содержимому?
zxczxc12
Сообщения: 161
Зарегистрирован: 2013.01.24, 21:16

Re: Админка с несколькими администраторами

Сообщение zxczxc12 »

1) где тут велосипед ?
я делаю то что было озвучено ( прописываю нужные мне роли в базу при первоначальной установке приложения, Просто мне так удобно )
2) приведенный пример rbac - модуля нужен что бы удобно было рулить ролями с веб интерфейса

конец истории
Ответить