gpt4 book ai didi

silverstripe - 根据组成员限制对特定页面类型的访问是在吗?

转载 作者:行者123 更新时间:2023-12-02 09:26:28 25 4
gpt4 key购买 nike

我正在为一家健身房做一个项目。我有一个名为 GymLocationPage 的页面类型。

每个健身房都会有自己的由管理员添加的 GymLocationPage - 每个健身房都会有每个健身房经理的登录信息。在安全区域中,我创建了一个名为 Gym Manager 的组,并在创建成员时将它们添加到该组中。

当健身房经理登录时,我只希望他们能够查看和编辑他们的健身房的GymLocationPage,而没有其他页面/模型管理员等。

如何使用特定的页面类型执行此操作,并确保当前登录的用户只能编辑其特定的健身房页面。

例如

鲍勃是纽约的健身房经理=>他只能访问纽约的健身房地点页面(看不到任何其他健身房地点或其他页面等)。


John 是加州的健身房经理 => 他只能访问加州的健身房地点页面(看不到任何其他健身房地点或其他页面等)。

最佳答案

SilverStripe 有一个相当不错的 permission management 。您可以在代码中创建权限并手动添加到用户组。

<?php
class Foo extends DataObject implements PermissionProvider
{

/**
* Return a map of permission codes to add to the dropdown
* shown in the Security section of the CMS.
* array(
* 'VIEW_SITE' => 'View the site',
* );
*/
public function providePermissions()
{
return [
'FOO_MANAGE' => [
'name' => _t('FOO.PERMISSION_MANAGE_DESCRIPTION', 'Create, edit and delete Foo Items'),
'category' => _t('Permissions.FOO_CATEGORY', 'Foo'),
],
'FOO_CREATE' => [
'name' => _t('FOO.PERMISSION_CREATE_DESCRIPTION', 'Create Foo Items'),
'category' => _t('Permissions.FOO_CATEGORY', 'Foo'),
]
];
}
}

在 DataObject 或页面类型中,您可以检查不同的 can 方法来定义用户可以查看、可以编辑、可以删除等内容。

canView() 用于在前端“访问”页面,canEdit() 用于在后端编辑页面。

/**
* @param null $member
* @return bool
*/
public function canView($member = null)
{
//this method is for accessing / viewing the page.
return true;
}

/**
* @param null $member
* @return bool
*/
public function canCreate($member = null)
{
$parent = parent::canCreate($member);

$manage = Permission::check('FOO_MANAGE', 'any', $member);
$create = Permission::check('FOO_CREATE', 'any', $member);

return $parent || $manage || $create;
}

/**
* @param null $member
* @return bool
*/
public function canEdit($member = null)
{
$member = $member ?: Member::currentUser();
$parent = parent::canCreate($member);

$manage = Permission::check('FOO_MANAGE', 'any', $member);

//you can check everyting here...
$owner = $member ? $this->OwnerID == $member->ID : false;

return $parent || $manage || $owner;
}

/**
* @param null $member
* @return bool
*/
public function canDelete($member = null)
{
$parent = parent::canCreate($member);

$manage = Permission::check('FOO_MANAGE', 'any', $member);

return $parent || $manage;

}

关于silverstripe - 根据组成员限制对特定页面类型的访问是在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com