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();
}
}
通过为特定页面创建特定的 Permission
s 来代替使用 Permission
s(如您的问题)也是可能的,并且可能更可取。例如,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',
];
}
正在尝试设置权限,以便只有特定组的用户可以访问前端的特定页面。他们根本不需要访问 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();
}
}
通过为特定页面创建特定的 Permission
s 来代替使用 Permission
s(如您的问题)也是可能的,并且可能更可取。例如,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',
];
}