Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API Refactor inheritable permissions #57

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 30 additions & 32 deletions code/SiteConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,15 @@ public function getCMSFields()
asort($groupsMap);

$fields = new FieldList(
new TabSet("Root",
$tabMain = new Tab('Main',
new TabSet(
"Root",
$tabMain = new Tab(
'Main',
$titleField = new TextField("Title", _t('SilverStripe\\SiteConfig\\SiteConfig.SITETITLE', "Site title")),
$taglineField = new TextField("Tagline", _t('SilverStripe\\SiteConfig\\SiteConfig.SITETAGLINE', "Site Tagline/Slogan"))
),
$tabAccess = new Tab('Access',
$tabAccess = new Tab(
'Access',
$viewersOptionsField = new OptionsetField("CanViewType", _t('SilverStripe\\SiteConfig\\SiteConfig.VIEWHEADER', "Who can view pages on this site?")),
$viewerGroupsField = ListboxField::create("ViewerGroups", _t('SilverStripe\\CMS\\Model\\SiteTree.VIEWERGROUPS', "Viewer Groups"))
->setSource($groupsMap)
Expand Down Expand Up @@ -149,10 +152,17 @@ public function getCMSFields()
}

if (file_exists(BASE_PATH . '/install.php')) {
$fields->addFieldToTab("Root.Main", new LiteralField("InstallWarningHeader",
"<p class=\"message warning\">" . _t("SilverStripe\\CMS\\Model\\SiteTree.REMOVE_INSTALL_WARNING",
"Warning: You should remove install.php from this SilverStripe install for security reasons.")
. "</p>"), "Title");
$fields->addFieldToTab(
"Root.Main",
new LiteralField(
"InstallWarningHeader",
"<p class=\"message warning\">" . _t(
"SilverStripe\\CMS\\Model\\SiteTree.REMOVE_INSTALL_WARNING",
"Warning: You should remove install.php from this SilverStripe install for security reasons."
) . "</p>"
),
"Title"
);
}

$tabMain->setTitle(_t('SilverStripe\\SiteConfig\\SiteConfig.TABMAIN', "Main"));
Expand All @@ -173,7 +183,8 @@ public function getCMSActions()
{
if (Permission::check('ADMIN') || Permission::check('EDIT_SITECONFIG')) {
$actions = new FieldList(
FormAction::create('save_siteconfig',
FormAction::create(
'save_siteconfig',
_t('SilverStripe\\CMS\\Controllers\\CMSMain.SAVE', 'Save')
)->addExtraClass('btn-primary font-icon-save')
);
Expand Down Expand Up @@ -202,7 +213,9 @@ public function CMSEditLink()
*/
public static function current_site_config()
{
if ($siteConfig = DataObject::get_one('SilverStripe\\SiteConfig\\SiteConfig')) {
/** @var SiteConfig $siteConfig */
$siteConfig = DataObject::get_one(SiteConfig::class);
if ($siteConfig) {
return $siteConfig;
}

Expand All @@ -216,7 +229,7 @@ public function requireDefaultRecords()
{
parent::requireDefaultRecords();

$config = DataObject::get_one('SilverStripe\\SiteConfig\\SiteConfig');
$config = DataObject::get_one(SiteConfig::class);

if (!$config) {
self::make_site_config();
Expand Down Expand Up @@ -247,10 +260,7 @@ public static function make_site_config()
public function canView($member = null)
{
if (!$member) {
$member = Member::currentUserID();
}
if ($member && is_numeric($member)) {
$member = DataObject::get_by_id('SilverStripe\\Security\\Member', $member);
$member = Member::currentUser();
}

$extended = $this->extendedCan('canView', $member);
Expand All @@ -273,10 +283,7 @@ public function canView($member = null)
public function canViewPages($member = null)
{
if (!$member) {
$member = Member::currentUserID();
}
if ($member && is_numeric($member)) {
$member = DataObject::get_by_id('SilverStripe\\Security\\Member', $member);
$member = Member::currentUser();
}

if ($member && Permission::checkMember($member, "ADMIN")) {
Expand Down Expand Up @@ -316,10 +323,7 @@ public function canViewPages($member = null)
public function canEditPages($member = null)
{
if (!$member) {
$member = Member::currentUserID();
}
if ($member && is_numeric($member)) {
$member = DataObject::get_by_id('SilverStripe\\Security\\Member', $member);
$member = Member::currentUser();
}

if ($member && Permission::checkMember($member, "ADMIN")) {
Expand All @@ -333,7 +337,7 @@ public function canEditPages($member = null)

// check for any logged-in users with CMS access
if ($this->CanEditType === 'LoggedInUsers'
&& Permission::checkMember($member, $this->config()->required_permission)
&& Permission::checkMember($member, $this->config()->get('required_permission'))
) {
return true;
}
Expand All @@ -349,10 +353,7 @@ public function canEditPages($member = null)
public function canEdit($member = null)
{
if (!$member) {
$member = Member::currentUserID();
}
if ($member && is_numeric($member)) {
$member = DataObject::get_by_id('SilverStripe\\Security\\Member', $member);
$member = Member::currentUser();
}

$extended = $this->extendedCan('canEdit', $member);
Expand Down Expand Up @@ -387,10 +388,7 @@ public function providePermissions()
public function canCreateTopLevel($member = null)
{
if (!$member) {
$member = Member::currentUserID();
}
if ($member && is_numeric($member)) {
$member = DataObject::get_by_id('SilverStripe\\Security\\Member', $member);
$member = Member::currentUser();
}

if ($member && Permission::checkMember($member, "ADMIN")) {
Expand All @@ -404,7 +402,7 @@ public function canCreateTopLevel($member = null)

// check for any logged-in users with CMS permission
if ($this->CanCreateTopLevelType === 'LoggedInUsers'
&& Permission::checkMember($member, $this->config()->required_permission)
&& Permission::checkMember($member, $this->config()->get('required_permission'))
) {
return true;
}
Expand Down
57 changes: 57 additions & 0 deletions code/SiteConfigPagePermissions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

namespace SilverStripe\SiteConfig;

use SilverStripe\Security\Member;
use SilverStripe\Security\DefaultPermissionChecker;

/**
* Root permission provider for pages in the SiteTree root
*/
class SiteConfigPagePermissions implements DefaultPermissionChecker
{
/**
* Can root be edited?
*
* @param Member $member
* @return bool
*/
public function canEdit(Member $member = null)
{
return SiteConfig::current_site_config()->canEditPages($member);
}

/**
* Can root be viewed?
*
* @param Member $member
* @return bool
*/
public function canView(Member $member = null)
{
return SiteConfig::current_site_config()->canViewPages($member);
}

/**
* Can root be deleted?
*
* @param Member $member
* @return bool
*/
public function canDelete(Member $member = null)
{
// Same as canEdit
return $this->canEdit($member);
}

/**
* Can root objects be created?
*
* @param Member $member
* @return bool
*/
public function canCreate(Member $member = null)
{
return SiteConfig::current_site_config()->canCreateTopLevel();
}
}