10月CMS静态页面插件 - 根据用户角色隐藏/显示后端页面?

时间:2017-12-06 01:51:24

标签: laravel octobercms octobercms-plugins static-pages

如何根据用户的角色隐藏一些静态页面?

我使用名称“blabla”定义了用户的角​​色。 现在我想要隐藏这些用户的所有页面,除了“静态页面”后端中的页面“blabla”。 我怎么能这样做?

抱歉我的英文))

1 个答案:

答案 0 :(得分:0)

是的,你当然可以做到,但我们需要在这里写一些代码。

我们可以使用 cms.object.listInTheme 事件

在boot方法的插件中,您可以添加此事件侦听器并过滤静态页面。

\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);
                }
             }
         }
    }
});

目前此代码将检查 page-url / title / file-name 并静态限制用户显示列表中的页面,但您可以在此处放置自己的逻辑并使其动态化。

如果你没有得到它或想要动态解决方案那么请评论,我会更详细地解释。