2016-05-12 81 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'); 
}