Плагин October CMS Static Pages - скрывать / показывать страницы в бэкэнде на основе ролей пользователей?

Как я могу скрыть некоторые статические страницы в зависимости от роли пользователя?

Я определил роль пользователей с именем "блабла". Теперь я хочу спрятать все страницы от этих пользователей, кроме страницы "blabla" в бэкенде "Статические страницы". Как я могу это сделать?

Извините за мой английский))

1 ответ

Решение

Да, конечно, вы можете сделать это, но нам нужно написать код здесь.

мы можем использовать событие cms.object.listInTheme

В вашем плагине в методе загрузки вы можете добавить этот прослушиватель событий и фильтровать статические страницы.

\Event::listen('cms.object.listInTheme', function ($cmsObject, $objectList) {

    // lets check if we are really running in static pages
    // you can also add more checks here based on controllers etc ..
    if ($cmsObject instanceof \RainLab\Pages\Classes\Page) {

        $user = \BackendAuth::getUser();
        // role code and role name are different things
        // we should use role code as it act as constant
        $hasRoleFromWhichIneedTohidePages = $user->role->code === 'blabla' ? true : false;

        // if user has that role then we start filtering
        if($hasRoleFromWhichIneedTohidePages) {
            foreach ($objectList as $index => $page) {

                // we can use different matching you can use one of them
                // to identify your page which you want to hide. 
                // forgot method will hide that page

                // match against filename 
                if ($page->fileName == 'hidethispage.htm') {
                    $objectList->forget($index);
                }

                // OR match against title
                if ($page->title == 'hidethispage') {
                    $objectList->forget($index);
                }

                // OR match against url
                if ($page->url == '/hidethispage') {
                    $objectList->forget($index);
                }
             }
         }
    }
});

в настоящее время этот код будет проверять URL-адрес страницы / заголовка / имя-файла и статически ограничивать пользователя от показа страницы в списке, но вы можете разместить здесь свою собственную логику и сделать вещи динамичными.

Если вы не получили его или хотите динамическое решение, то, пожалуйста, прокомментируйте, я объясню более подробно.

Другие вопросы по тегам