Silverstripe - 设置前端页面的权限

时间:2017-05-12 07:24:47

标签: permissions silverstripe

尝试设置权限,以便只有特定的一组用户才能访问前端的某些页面。他们根本不需要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",
);
}

1 个答案:

答案 0 :(得分:4)

要根据他们所在的Group限制访问某些网页,您可以在模型的Member::inGroup功能中使用canView,如下所示:< / p>

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

通过为特定网页创建特定的Permission,我们也可以使用Permission(如您的问题中)。例如VIEW_ACCOUNT_PAGE用于帐户页面,然后将此Permission应用于您希望有权访问帐户页面的所有Group(在安全性下的CMS中 - &gt;网上论坛 - &gt ;组X - &gt;权限)。然后,您可以限制访问:

# 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',
    ];
}