Re: ログインアカウントを確認して、強制ログアウトさせたい

2021年2月22日 at 13:44

katzさん、aniyaさん、フォーラムの皆さま

いつも大変お世話になっております。
先週の週刊concrete5において、ご説明いただきました内容を参考に、
ドキュメントも参考にさせていただいたうえで、強制ログアウト
が実装出来ましたので、ご報告させていただきます。

katzさんより、メンバーを特定のグループに所属させておき、
$u = new User();
$u = User::getByUserID($userID);
$u->inGroup(Group $g);
で、検証するUserIdが特定のグループに属していた場合(trueを返したとき)
強制ログアウトさせる方法を教えていただきました。
メンバー内の、UserId が "sysadmin" がオプション管理者となりますので、
クローズドアンケートページ のcontroller 側の public funcitoin veiw() に、
以下のコードを実装しました。

public function view(){
//ユーザIDをシステムから取得し、初期表示を行う
$u = new User();
$uid = $u->getUserName();

//ユーザエンティティより個人情報を取得
$entity = Express::getObjectByHandle('Member');
$list = new \Concrete\Core\Express\EntryList($entity);
$list->filterByUserid($uid);
$results = $list->getResults();

if (count($results)){
foreach ($results as $personaldata){
$userid = $personaldata->getUserid();
$username = $personaldata->getUsername();
$mailaddress = $personaldata->getMailaddress();
}
if (isset($userid) && $userid != 'sysadmin'){
$this->set('uid', $userid);
} else {
$u->logout();
$this->redirect('アンケートメニュー画面URL');

}
if (isset($username) && $username != ''){
$this->set('uname', $username);
}
if (isset($mailaddress) && $mailaddress != ''){
$this->set('mailaddress', $mailaddress);
}

}

$this->set('message', t('授業評価アンケートメニュー画面'));
}

 これで、管理者オプションページへ"sysadmin" でログイン後、
ログアウトせずに画面を戻り、クローズドアンケートページへアクセスした
際に、強制ログアウトさせ、アンケートメニューページにリダイレクトさせる
事ができました。
これにより、アンケートページ表示時、ログイン画面が無事に表示されることを
確認いたしました。

 ちなみに、週刊concrete5 放送内容以外に、以下のドキュメントを参考に
させていただきました。
http://concrete5-japan.org/help/5-6/developer/permissions/users/
http://www.concrete5.org/marketplace/addons/loginlogout-link/support/logout-redirect-to-a-chosen-page

ありがとうございました。

タグ: