Domanda

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?

È stato utile?

Soluzione

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top