Hello,
Using SS 242
I'm using the GroupDecorator + CustomLoginForm - modified the _config..
dev/build..
works..
Security-> new group
redirect to page 'downloads'
created new member
admin group -> checked the box 'go to admin area'
-> saved.
But when i log-in with the redirecter account.. i get the message:
-> I'm sorry, but you can't access that part of the CMS. If you want to log in as someone else, do so below
Does this script malfunction with SS 2.4.2 ?
GroupDecorator
<?php
class GroupDecorator extends DataObjectDecorator {
function augmentSQL(SQLQuery &$query) {}
public function extraStatics(){
return array(
'db' => array(
"GoToAdmin" => "Boolean"
),
'has_one' => array(
"LinkPage" => "SiteTree"
),
);
}
public function updateCMSFields(FieldSet &$fields) {
$fields->addFieldToTab("Root.Members", new CheckboxField("GoToAdmin", " Go to Admin area"), 'Members');
$fields->addFieldToTab("Root.Members", new TreeDropdownField("LinkPageID", "Or select a Page to redirect to", "SiteTree"), 'Members');
}
}
CustomLoginForm
<?php
class CustomLoginForm extends MemberLoginForm {
// this function is overloaded on our sublcass (this) to do something different
public function dologin($data) {
if($this->performLogin($data)) {
if(!$this->redirectByGroup($data))
Director::redirect(Director::baseURL());
echo 'done';
} else {
if($badLoginURL = Session::get("BadLoginURL")) {
Director::redirect($badLoginURL);
} else {
Director::redirectBack();
}
}
}
public function redirectByGroup($data) {
// gets the current member that is logging in.
$member = Member::currentUser();
// gets all the groups.
$Groups = DataObject::get("Group");
//cycle through each group
foreach($Groups as $Group){
//if the member is in the group and that group has GoToAdmin checked
if($member->inGroup($Group->ID) && $Group->GoToAdmin == 1)
{
//redirect to the admin page
Director::redirect(Director::baseURL() . 'admin' );
return true;
}
//otherwise if the member is in the group and that group has a page link defined
elseif($member->inGroup($Group->ID) && $Group->LinkPageID != 0)
{
//Get the page that is referenced in the group
$Link = DataObject::get_by_id("SiteTree", "{$Group->LinkPageID}")->URLSegment;
//direct to that page
Director::redirect(Director::baseURL() . $Link);
return true;
}
}
//otherwise if none of the above worked return fase
return false;
}
}
?>
_config
Object::add_extension('Group', 'GroupDecorator');
Thx!