2016-04-14 6 views
1

Ich habe Datenobjekts:Silvers Modell-Ebenen-Berechtigungen: CanCreate() funktioniert nicht

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

Ich habe Gruppe erstellt "Documents Entwicklers" und gewährt es rightes DOCUMENTS_VIEW, EDIT, DELETE, CREATE. Ich möchte, dass alle Benutzer dieser Gruppe nur alle Dokumente anzeigen und neue Dokumente erstellen können, und nur der Besitzer (Benutzer mit der ID == Mitglieds-ID) könnte seine Dokumente bearbeiten und löschen. Es funktioniert in Ordnung, wenn der Benutzer versucht, seine Dokumente zu bearbeiten oder zu löschen oder andere Dokumente anzuzeigen. Aber wenn er versucht, neues Dokument zu erstellen (Schaltfläche "Erstellen" in CMS drücken), erscheint ein Popup-Fenster "Forbidden": (You can see CMS Window here) Gib mir bitte irgendwelche Ideen.

+0

Haben Sie nach dem Erstellen der Berechtigungen dev/build/flush gemacht? Forbidden scheint ein unzusammenhängender Fehler zu sein, wie wäre es mit "F5" zu schlagen oder neu zu laden, nachdem du das bekommen hast? Dann sehen Sie möglicherweise eine Fehlermeldung, die von der Ajax API ausgeblendet wird. Sie können auch Fehlerprotokolle oder den Netzwerkverkehr (z. B. mithilfe der Registerkarte "Firebugs-Netzwerk") auf Fehlermeldungen prüfen. – wmk

Antwort

0

ich eine gewisse Verbesserung in CanEdit gemacht() Funktion:

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

Jetzt können Benutzer Dokument erstellen. Es scheint mir, dass, wenn der Benutzer versucht, ein neues Dokument zu erstellen, $ this-> MemberID nicht definiert ist.

Verwandte Themen