Silverstripe 使用模型管理员访问一个页面

Silverstripe access to one page with model admin

当一组仅限于一个站点部分时,有人知道如何访问数据对象条目吗?

我有这样的部分:

Home
About us 
Products |        <----- Group "Marketing" have an access to this place only.
         |-> Product group 1
         |-> Product group 2

我遇到的问题是我可以限制 "Marketing" 组的访问权限并且他们能够编辑和查看页面(和 children-pages)但看不到 DataObject 条目(没有列表)以及 add/delete 或编辑这些条目。

如果我将 "all administrator access" 设置为 "Marketing" 组,它可以工作,但同时该组可以访问整个站点。 (我希望它只到 "Products",它是 children。

有人知道如何解决这个问题吗?

DataObjects 的权限默认需要 "ADMIN" 权限。我通常只添加一个非管理员可编辑的 DataObjects 扩展,如下所示:

class CanEditExtension extends DataExtension
{
    public function canEdit($member){
        return 
            Permission::check('CMS_ACCESS_CMSMain', 'any', $member) 
            || Permission::check('CMS_ACCESS_LeftAndMain', 'any', $member);
    }   
    public function canView($member){
        return 
            Permission::check('CMS_ACCESS_CMSMain', 'any', $member) 
            || Permission::check('CMS_ACCESS_LeftAndMain', 'any', $member);
    }

    public function canCreate($member = null){
        return 
            Permission::check('CMS_ACCESS_CMSMain', 'any', $member) 
            || Permission::check('CMS_ACCESS_LeftAndMain', 'any', $member);
    }

    public function canDelete($member = null){
        return 
            Permission::check('CMS_ACCESS_CMSMain', 'any', $member) 
            || Permission::check('CMS_ACCESS_LeftAndMain', 'any', $member);
    }
}

然后,通过 YAML 配置应用扩展:

# in mysite/_config/config.yml
MyDataObject:
  extensions:
    - CanEditExtension

或者您可以直接在 class:

中指定扩展名
class MyDataObject extends DataObject
{
    private static $extensions = array('CanEditExtension');
}