根据SilverStripe中的当前成员限制SiteTree

时间:2016-09-26 04:07:40

标签: silverstripe

是否可以根据登录用户将站点树的视图限制为一个特定节点?

当管理员登录时,他们将有权访问所有根节点:

  • 墨尔本
    • 墨尔本第一页
    • 墨尔本第二页
  • 悉尼
    • 悉尼第一页
    • 悉尼第二页

当属于墨尔本组的某人登录时,他们将能够看到:

  • 墨尔本第一页
  • 墨尔本第二页

1 个答案:

答案 0 :(得分:1)

使用此功能创建新扩展程序:

  • canView($member = null)

    定义页面是否应在CMS中显示给当前用户。

  • canEdit($member = null)

    定义当前用户是否可以编辑页面。

  • canCreate($member = null)

    定义当前用户是否可以创建新页面。

  • canDelete($member = null)

    定义当前用户是否可以删除该页面。

  • canPublish($member = null)

    定义当前用户是否可以发布草稿页。

所有挂钩都可以返回3个值:

  1. TRUE - 授予访问权限
  2. FALSE - 拒绝访问
  3. NULL - 没有决定,继续下一个扩展。所有DataObject都完成决策循环并回退到ADMIN权限。
  4. 因此,您可以创建自己的权限逻辑。

    class CMSTreeChildrenFilter extends Extension
    {
    
        public function augmentAllChildrenIncludingDeleted($children, $context) {
    
            if (!is_a($context, 'CMSPagesController')) return;
    
            foreach ($children as $page) {
                if (!$page->canView()) {
                    $children->remove($page);
                }
            }
        }
    }
    

    但是在您的情况下,以下配置应该有效:

    1. 配置根页(墨尔本和悉尼)以便“只有这些人”可以查看和编辑页面并选择相应的组。
    2. 分支中的所有页面都应该从父页面继承权限。
    3. 在SiteConfig中配置了从“root”继承权限的其他根页面。导航到“设置/访问”,然后选择“管理员组”以便能够查看和编辑页面。
    4. 默认情况下,根页面被禁用,但在用户无权访问时,仍会在站点树中显示。您可以使用这种额外的css样式隐藏它们:

      .cms-tree .disabled {display:none;}