Reputation: 4424
I have a custom page type which needs to be created with the following default security settings (as they would appear in the CMS:
Who can view this page?
Only these people(choose from list)
Administrators, Content Authors
In the Datamodel this would involve CanViewType = OnlyTheseUsers in SiteTree - and two rows in SiteTree_ViewerGroups where SiteTreeID = ID and GroupID = 1 & 2 respectively.
Is there a way of doing this via the framework or should I directly manipulate the database using OnBeforeWrite?
Upvotes: 2
Views: 416
Reputation: 15794
You can set a default CanViewType
and ViewerGroups
by using the populateDefaults()
function:
public function populateDefaults() {
$this->CanViewType = 'OnlyTheseUsers';
$this->ViewerGroups()->add(Group::get()->byID(1));
$this->ViewerGroups()->add(Group::get()->byID(2));
parent::populateDefaults();
}
This will add the 2 user groups and set the can view type to 'OnlyTheseUsers'.
An alternative solution is to set the canView
function to only allow members in group 1 or 2 to view the page:
public function canView($member = NULL) {
$currentUser = Member::currentUser();
if ($currentUser && ($currentUser->inGroup(1) || $currentUser->inGroup(2))) {
return true;
}
return false;
}
Upvotes: 4