Skip to content

Commit

Permalink
BaseElementObject - refactor permissions (#75)
Browse files Browse the repository at this point in the history
Follows model of BaseElement - largely Page permission based when possible
  • Loading branch information
jsirish committed Mar 26, 2018
1 parent 1ceb0f7 commit 7caa846
Show file tree
Hide file tree
Showing 16 changed files with 553 additions and 288 deletions.
81 changes: 0 additions & 81 deletions src/Extensions/ElementPermissions.php

This file was deleted.

48 changes: 0 additions & 48 deletions src/Extensions/ElementalPermissions.php

This file was deleted.

16 changes: 16 additions & 0 deletions src/Model/AccordionPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,20 @@ public function getCMSFields()

return parent::getCMSFields();
}

/**
* @return null
*/
public function getPage()
{
$page = null;

if ($this->AccordionID) {
if ($this->Accordion()->hasMethod('getPage')) {
$page = $this->Accordion()->getPage();
}
}

return $page;
}
}
93 changes: 93 additions & 0 deletions src/Model/BaseElementObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use SilverStripe\Forms\FieldList;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\ValidationResult;
use SilverStripe\Security\Permission;
use SilverStripe\Versioned\Versioned;

/**
Expand Down Expand Up @@ -135,4 +136,96 @@ public function validate()

return $result;
}

/**
* @return null
*/
public function getPage()
{
return null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
* @return boolean
*/
public function canView($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

if ($page = $this->getPage()) {
return $page->canView($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
*
* @return boolean
*/
public function canEdit($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

if ($page = $this->getPage()) {
return $page->canEdit($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* Uses archive not delete so that current stage is respected i.e if a
* element is not published, then it can be deleted by someone who doesn't
* have publishing permissions.
*
* @param Member $member
*
* @return boolean
*/
public function canDelete($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

if ($page = $this->getPage()) {
return $page->canArchive($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
* @param array $context
*
* @return boolean
*/
public function canCreate($member = null, $context = array())
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}
}
16 changes: 16 additions & 0 deletions src/Model/FeatureObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,20 @@ public function getCMSFields()

return parent::getCMSFields();
}

/**
* @return null
*/
public function getPage()
{
$page = null;

if ($this->ElementFeatures()) {
if ($this->ElementFeatures()->hasMethod('getPage')) {
$page = $this->ElementFeatures()->getPage();
}
}

return $page;
}
}
16 changes: 16 additions & 0 deletions src/Model/GalleryImage.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,20 @@ public function getCMSFields()

return $fields;
}

/**
* @return null
*/
public function getPage()
{
$page = null;

if ($this->PhotoGallery()) {
if ($this->PhotoGallery()->hasMethod('getPage')) {
$page = $this->PhotoGallery()->getPage();
}
}

return $page;
}
}
16 changes: 16 additions & 0 deletions src/Model/PromoObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,20 @@ public function getCMSFields()

return parent::getCMSFields();
}

/**
* @return null
*/
public function getPage()
{
$page = null;

if ($this->ElementPromos()) {
if ($this->ElementPromos()->hasMethod('getPage')) {
$page = $this->PhotoGallery()->getPage();
}
}

return $page;
}
}
34 changes: 0 additions & 34 deletions tests/Extensions/ElementPermissionsTest.php

This file was deleted.

Loading

0 comments on commit 7caa846

Please sign in to comment.