FEATURE: Ticket #2198 - Merged patch making can() decoratorable by defining augmentCan()

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@53183 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sean Harvey 2008-04-22 02:28:07 +00:00
parent 6c342f7db5
commit 130ead34cd

View File

@ -514,25 +514,15 @@ class SiteTree extends DataObject {
if($member && $member->isAdmin()) { if($member && $member->isAdmin()) {
return true; return true;
} }
switch(strtolower($perm)) { if(method_exists($this, 'can' . ucfirst($perm))) {
case 'edit': $method = 'can' . ucfirst($perm);
if((Permission::check('CMS_ACCESS_CMSMain') && return $this->$method($member);
(($this->Editors == 'LoggedInUsers' && $member) ||
($this->Editors == 'OnlyTheseUsers' && $member &&
$member->isInGroup($this->EditorsGroup)))) == false)
return false;
break;
case 'view':
case 'view_page':
if(((!$this->Viewers) || ($this->Viewers == 'Anyone') ||
($this->Viewers == 'LoggedInUsers' && $member) ||
($this->Viewers == 'OnlyTheseUsers' && $member &&
$member->isInGroup($this->ViewersGroup))) == false)
return false;
break;
} }
$args = array($perm, $member, true);
$this->extend('alternateCan', $args);
if($args[2] == false) return false;
return true; return true;
@ -549,7 +539,18 @@ class SiteTree extends DataObject {
* *
* @return boolean True if the current user can add children. * @return boolean True if the current user can add children.
*/ */
public function canAddChildren() { public function canAddChildren($member = null) {
if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanAddChildren', $args);
if($args[1] == false) return false;
return $this->canEdit() && $this->stat('allowed_children') != 'none'; return $this->canEdit() && $this->stat('allowed_children') != 'none';
} }
@ -563,8 +564,48 @@ class SiteTree extends DataObject {
* *
* @return boolean True if the current user can view this page. * @return boolean True if the current user can view this page.
*/ */
public function canView() { public function canView($member = null) {
return $this->can('view'); if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanView', $args);
if($args[1] == false) return false;
if(((!$this->Viewers) || ($this->Viewers == 'Anyone') ||
($this->Viewers == 'LoggedInUsers' && $member) ||
($this->Viewers == 'OnlyTheseUsers' && $member &&
$member->isInGroup($this->ViewersGroup))) == false)
return false;
return true;
}
/**
* This function should return true if the current user can view this
* page.
*
* It can be overloaded to customise the security model for an
* application.
*
* @return boolean True if the current user can view this page.
*/
public function canView_page($member = null) {
if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanView_page', $args);
if($args[1] == false) return false;
return $this->canView($member);
} }
@ -577,7 +618,18 @@ class SiteTree extends DataObject {
* *
* @return boolean True if the current user can delete this page. * @return boolean True if the current user can delete this page.
*/ */
public function canDelete() { public function canDelete($member = null) {
if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanDelete', $args);
if($args[1] == false) return false;
return $this->stat('can_create') != false; return $this->stat('can_create') != false;
} }
@ -592,7 +644,18 @@ class SiteTree extends DataObject {
* @return boolean True if the current user can create pages on this * @return boolean True if the current user can create pages on this
* class. * class.
*/ */
public function canCreate() { public function canCreate($member = null) {
if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanCreate', $args);
if($args[1] == false) return false;
return $this->stat('can_create') != false || Director::isDev(); return $this->stat('can_create') != false || Director::isDev();
} }
@ -606,8 +669,25 @@ class SiteTree extends DataObject {
* *
* @return boolean True if the current user can edit this page. * @return boolean True if the current user can edit this page.
*/ */
public function canEdit() { public function canEdit($member = null) {
return $this->can('Edit'); if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanEdit', $args);
if($args[1] == false) return false;
if((Permission::check('CMS_ACCESS_CMSMain') &&
(($this->Editors == 'LoggedInUsers' && $member) ||
($this->Editors == 'OnlyTheseUsers' && $member &&
$member->isInGroup($this->EditorsGroup)))) == false)
return false;
return true;
} }
/** /**
@ -619,7 +699,18 @@ class SiteTree extends DataObject {
* *
* @return boolean True if the current user can publish this page. * @return boolean True if the current user can publish this page.
*/ */
public function canPublish() { public function canPublish($member = null) {
if(!isset($member)) {
$member = Member::currentUser();
}
if($member && $member->isAdmin()) {
return true;
}
$args = array($member, true);
$this->extend('alternateCanPublish', $args);
if($args[1] == false) return false;
return $this->canEdit(); return $this->canEdit();
} }