Skip to content

Commit

Permalink
Add permissions to search engine and logs
Browse files Browse the repository at this point in the history
  • Loading branch information
dizzystuff committed Jul 3, 2021
1 parent 72dba91 commit edaed7a
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 6 deletions.
67 changes: 62 additions & 5 deletions src/Model/SearchEngine.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,20 @@
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Core\ClassInfo;
use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordViewer;
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
use SilverStripe\Forms\GridField\GridFieldEditButton;
use SilverStripe\Forms\GridField\GridFieldViewButton;
use SilverStripe\Forms\ReadonlyField;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Permission;
use SilverStripe\Security\PermissionProvider;
use SilverStripe\Versioned\Versioned;

class SearchEngine extends DataObject
class SearchEngine extends DataObject implements PermissionProvider
{
private static $table_name = 'SearchEngine';
private static $singular_name = 'Search Engine';
Expand Down Expand Up @@ -94,7 +102,8 @@ public function getCMSFields()
'SortMode',
'SortDirection',
'DirectSortMode',
'DirectSortDirection'
'DirectSortDirection',
'Logs'
]);

if (!$this->isInDB()) {
Expand Down Expand Up @@ -128,7 +137,7 @@ public function getCMSFields()
'direct'
);
if ($directSortFields) {
$fields->addFieldsToTab('Root.Main', $directSortFields);
$fields->addFieldsToTab('Root.Config', $directSortFields);
}

$sortFields = $this->getSortFields(
Expand All @@ -137,10 +146,29 @@ public function getCMSFields()
'fields'
);
if ($sortFields) {
$fields->addFieldsToTab('Root.Main', $sortFields);
$fields->addFieldsToTab('Root.Config', $sortFields);
}

$fields->addFieldToTab('Root.Main', $searchPageField);
$fields->addFieldToTab('Root.Config', $searchPageField);

if (Permission::check('VIEW_SEARCH_LOGS'))
{
$logsField = GridField::create(
'Logs',
'Search Logs',
$this->Logs(),
$logsConfig = GridFieldConfig_RecordViewer::create(null, 15, true, false)
);

$logsConfig->removeComponentsByType([
GridFieldEditButton::class,
GridFieldAddNewButton::class,
GridFieldDeleteAction::class,
GridFieldViewButton::class
]);

$fields->addFieldToTab('Root.Main', $logsField);
}

return $fields;
}
Expand Down Expand Up @@ -719,4 +747,33 @@ public function isConfigured()
return false;
}
}

public function canCreate($member = null, $context = [])
{
return false;
}

public function canView($member = null)
{
return Permission::checkMember($member, 'MANAGE_SEARCH');
}

public function canEdit($member = null)
{
return Permission::checkMember($member, 'MANAGE_SEARCH');
}

public function canDelete($member = null)
{
return false;
}

public function providePermissions() {
return [
'MANAGE_SEARCH' => array(
'name' => 'Manage search',
'category' => 'Search engines',
)
];
}
}
33 changes: 32 additions & 1 deletion src/Model/SearchLog.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Permission;
use SilverStripe\Security\PermissionProvider;

class SearchLog extends DataObject
class SearchLog extends DataObject implements PermissionProvider
{
private static $table_name = 'SearchLog';
private static $singular_name = 'Search Log';
Expand Down Expand Up @@ -38,4 +40,33 @@ public function getDurationSummary()
{
return round($this->Duration, 5);
}

public function canCreate($member = null, $context = [])
{
return false;
}

public function canView($member = null)
{
return Permission::checkMember($member, 'VIEW_SEARCH_LOGS');
}

public function canEdit($member = null)
{
return false;
}

public function canDelete($member = null)
{
return false;
}

public function providePermissions() {
return [
'VIEW_SEARCH_LOGS' => [
'name' => 'View search logs',
'category' => 'Search engines',
]
];
}
}
2 changes: 2 additions & 0 deletions src/Tasks/SearchEnginesBuildTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class SearchEnginesBuildTask extends BuildTask
protected $title = "Build Search Engine Manifests";
protected $description = "Only needs to be called once on production, or to re-build the search engines";

private static $segment = 'search-manifest-build';

public function run($request)
{
set_time_limit(0);
Expand Down

0 comments on commit edaed7a

Please sign in to comment.