Авторизация пользователей в многослойном префиксе - PullRequest
0 голосов
/ 26 марта 2019

Я использую CakePHP для создания нового веб-сайта и для административной части, я использую многослойные префиксы, например.(admin / web)

Таким образом, в этом случае admin - это префикс, а web - это префикс.

Я пытался использовать контроллер authorize => и настроить функцию isAuthorized следующим образом:

public function isAuthorized($user = null)
    {
        if (!$this->request->getParam('prefix')) {
            return true;
        }
        // Only admins or specific roles can access admin functions
        if ($this->request->getParam('prefix') === 'admin') {
            if ($this->request->getParam('prefix') === 'web') {
                 return (bool)($user['role'] === 'admin');
            }
            return (bool)($user['role'] === 'admin');
        }
        return false;
    }

И в любом контроллере я добавил:

public function beforeFilter(Event $event) 
{
    parent::beforeFilter($event);
}

Но работает только первый префикс (admin), другой (web) выдает мне сообщение о том, что мне нужновойти, прежде чем я смогу увидеть эту страницу.

Есть предложения?

Спасибо.

1 Ответ

1 голос
/ 26 марта 2019

Как говорит Документация , вы можете перемещать действия "admin" в области действия администратора:

Router::prefix('admin', function ($routes) {
    // All routes here will be prefixed with `/admin`
    // And have the prefix => admin route element added.
    $routes->fallbacks(DashedRoute::class);
});

и разместите ваши админ методы под скажем src/Controller/Admin/UsersController.php

Или вы можете использовать оба префикса, как сейчас, скажем: page/admin/web/page но в этом случае

 // $this->request->getParam('prefix') returns admin/web
public function isAuthorized($user = null)
    {
        $prefix =$this->request->getParam('prefix');
        if (!$prefix ) {
            return true; //sure?
        }
        // Only admins or specific roles can access admin functions
        if ($prefix==='web/admin' || $prefix==='admin') {
            return (bool)($user['role'] === 'admin');
        }
        return false;
    }
...