2016-05-12 83 views
2

有人知道如何在一个组限制为一个站点部分时访问数据对象条目吗?Silverstripe使用模型管理员访问一个页面

我有这样几个部分:

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

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

如果我将“营销”组设置为“所有管理员访问权限”,则它可以正常工作,但同一组可以访问整个站点。 (我想它有它只是为“产品”和它的孩子。

有谁知道如何排序了这一点?

+2

你可以设置PermissionProvider在数据对象和比设定什么都权限,你需要每CMS或做模型级权限一些动态的东西。如果它基本适合你的需要(canView,canEdit,canDelete,canCreate)到模型→第二链接。 https://docs.silverstripe.org/en/3.3/developer_guides/security/permissions/ https://docs.silverstripe.org/en/3.3/developer_guides/model/permissions/ – munomono

+0

嗨,谢谢,但我忘了提到我正在使用Silverstripe 3.1 –

+0

Maciej - 'PermissionProvider'仍然存在于3.1中,实际上它仍然存在于3.3中https://github.com/silverstripe/silverstripe-framework/blob/3.3/security/PermissionProvider.php – theruss

回答

3

对数据对象的权限要求默认情况下,“管理员”权限。我平时只需添加一个扩展数据对象应当由非管理员可编辑的,是这样的:

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