SilverStripe模型级权限:canCreate()不起作用

时间:2016-04-14 07:15:26

标签: silverstripe

我有数据对象:

class Documents extends DataObject implements PermissionProvider {

private static $db = array(
    'DocType' => 'Text',
    'ApprovalDate' => 'Date',
    'PublicationDate' => 'Date',
    'DocNumber' => 'Text',
    'DocTitle' => 'Text',
    'KeyWords' => 'Text'
         );

private static $has_one = array(
    'Member' => 'Member'
);
...
static $api_access = true; 

public function canEdit($member = false) {

return (Member::currentUserID() == $this->MemberID) || parent::canEdit($member);
}

public function canDelete($member = false) {
   return (Member::currentUserID() == $this->MemberID) ||   parent::canDelete($member);
}

public function canView($member = false) {
 return Permission::check('DOCUMENTS_VIEW');
}

public function canCreate($member = false) {
return Permission::check('DOCUMENTS_CREATE');
}

function providePermissions() {
    return array(
      'DOCUMENTS_VIEW' => 'View Documents ',
      'DOCUMENTS_EDIT' => 'Edit Documents ',
      'DOCUMENTS_DELETE' => 'Delete Documents ',
      'DOCUMENTS_CREATE' => 'Create Documents '
 );
} 

我创建了“文档开发人员”组,并授予它rightes DOCUMENTS_VIEW,EDIT,DELETE,CREATE。我希望该组的所有用户只能查看所有文档并创建新文档,只有所有者(ID == MemberID的用户)才能编辑和删除他的文档。 当用户尝试编辑或删除其文档或查看其他文档时,它可以正常工作。但是当他尝试创建新文档(在CMS中按“创建”按钮)时,弹出窗口“禁止”出现:(You can see CMS Window here) 请给我任何想法。

1 个答案:

答案 0 :(得分:0)

我在canEdit()函数中做了一些改进:

public function canEdit($member = false) {
   if ($this->MemberID) return (Member::currentUserID() == $this->MemberID) || parent::canEdit($member);  
   return Permission::check('DOCUMENTS_EDIT') || parent::canEdit($member) ;
}

现在用户可以创建文档。在我看来,当用户尝试创建新文档时,$ this-> MemberID未定义。