Silverstripe - 为前端页面设置权限

Silverstripe - Setting Permissions for Front End pages

正在尝试设置权限,以便只有特定组的用户可以访问前端的特定页面。他们根本不需要访问 CMS。

我已关注 Silverstripe 上的 permissions guide,但我不确定如何分配特定组以仅查看特定页面。

这会拒绝除管理员以外的所有人访问:

public function init() {
parent::init();
if(!Permission::check("VIEW_SITE")) Security::permissionFailure();
}

public function providePermissions() {
return array(
  "VIEW_SITE" => "Access the site",
);
}

要根据 Group 所在的内容限制对某些页面的访问,您可以在模型的 canView 函数中使用 Member::inGroup,如下所示:

public function canView($member = null) {

    if (!$member) {
        $member = Member::currentUser();
    }

    return Permission::check('ADMIN') || ($member && $member->inGroup('MyGroup'));

}

或者在控制器的 init 函数中像这样:

public function init()
{
    parent:init();

    $member  = Member::currentUser();
    $canView = Permission::check('ADMIN') || ($member && $member->inGroup('MyGroup'));

    if (!$canView) {
        Security::permissionFailure();
    }
}

通过为特定页面创建特定的 Permissions 来代替使用 Permissions(如您的问题)也是可能的,并且可能更可取。例如,VIEW_ACCOUNT_PAGE 用于帐户页面,然后将此 Permission 应用到您想要访问帐户页面的所有 Group(在 CMS 中,安全 -> 组 -> 组X -> 权限)。然后您可以这样限制访问:

# In AccountPage_Controller
public function init()
{
    parent:init();

    $canView = Permission::check('ADMIN') || Permission::check('VIEW_ACCOUNT_PAGE');

    if (!$canView) {
        Security::permissionFailure();
    }
}

public function providePermissions() 
{
    return [
        'VIEW_ACCOUNT_PAGE' => 'View account page',
    ];
}