【问题标题】:Silverstripe access to one page with model adminSilverstripe 使用模型管理员访问一页
【发布时间】:2016-09-08 06:36:13
【问题描述】:

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

我有这样的部分:

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

我遇到的问题是我可以限制“营销”组的访问权限,他们能够编辑和查看页面(和子页面)但也看不到 DataObject 条目(没有列表)添加/删除或编辑这些条目。

如果我将“所有管理员访问权限”设置为“营销”组,它可以工作,但同时该组可以访问整个站点。 (我希望它只用于“产品”,它是孩子们。

有人知道怎么解决吗?

【问题讨论】:

标签: silverstripe modeladmin


【解决方案1】:

默认情况下,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 MyDataObject extends DataObject
{
    private static $extensions = array('CanEditExtension');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多