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

2021年2月19日 at 11:49

フォーラムの皆さま

いつも暖かいご支援をいただきまして、ありがとうございます。
現在、外部フォーム機能をもとに、WEBアンケートシステムを
開発しております。

アンケートのうち、ログインが必要な個所が2つあり、1つはクローズド
アンケートと申しまして、学校の生徒さんや企業の社員さんごとに
回答するアンケート項目が異なる構成になっています。
ここにログインするために、Userとしてそれぞれ個別のアカウントを
登録しています。

もうひとつは、オプション機能といい、アンケートに未回答の人を一覧
で抽出したり、アンケート回答後に自動送信するメール文章の作成保存、
名前やメールアドレスなどを文中にエンベッドする「マジックワード」
機能、ExpressエントリーをCSVファイルとしてダウンロードする機能
を実装しております。

オプション機能は、アンケート回答者ではなく、学校や企業の管理者的
立場の方がログインして使用することを前提としていますので、
オプション機能を使ったあとは、ログアウトして、アンケートページに
移動してもらう必要があります。
ところが、ログアウトを忘れて画面を閉じてしまい、オプション管理者
権限アカウントでクローズドアンケートページにアクセスする場合が
想定され、オプション管理者アカウントでクローズドアンケートページを
表示すると、当然ながら、個人別アンケート一覧が1件も表示されません。

前置きが大変長くなりましたが、実現したいことは、
オプション画面に管理者権限で入り、ログアウトせずにクローズドアンケート
ページへアクセスした際、現在のアカウントを取得して、オプション管理者
の場合、強制ログアウトさせたいと考えています。

ユーザアカウントをシステムから取得することは問題なくできております。
強制的にログアウトさせて、クローズドアンケートのログインページに
リダイレクトする方法が知りたいと思っております。

ご教示いただければ幸いでございます。
どうぞよろしくお願い申し上げます。

# concrete5 Version
Core Version - 8.5.4
Version Installed - 8.5.4
Database Version - 20200609145307

# Database Information
Version: 5.1.73
SQL Mode:

# concrete5 Packages
CSV User Import & Export (0.1.1), Honest Websites Back To Top (1.1.0), Login/Logout Link (1.0), Login Page Background (0.9.1), Manual Nav (2.3.3), Migration Tool (0.9.1)

# concrete5 Overrides
blocks/external_form/form/controller/tkp_menu.php, blocks/external_form/form/controller/enq_a.php, blocks/external_form/form/controller/enq_b.php, blocks/external_form/form/controller/enq_c.php, blocks/external_form/form/controller/shukai.php, blocks/external_form/form/controller/enqopt.php, blocks/external_form/form/controller/emenu.php, blocks/external_form/form/controller/mailtmp.php, blocks/external_form/form/controller/csvdwn.php, blocks/external_form/form/controller, blocks/external_form/form/tkp_menu.php, blocks/external_form/form/enq_a.php, blocks/external_form/form/enq_b.php, blocks/external_form/form/enq_c.php, blocks/external_form/form/shukai.php, blocks/external_form/form/enqopt.php, blocks/external_form/form/emenu.php, blocks/external_form/form/mailtmp.php, blocks/external_form/form/csvdwn.php, blocks/external_form/form, blocks/external_form, mail/mail_send_hyoka_a.php, mail/mail_send_hyoka_b.php, mail/mail_2tmp.php, mail/mail_1tmp.php, mail/mail_3tmp.php, mail/mail_4tmp.php, mail/mail_5tmp.php

# concrete5 Cache Settings
Block Cache - Off
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).

# Server Software
Apache

# Server API
apache2handler

# PHP Version
7.3.15

# PHP Extensions
apache2handler, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, imap, intl, json, ldap, libxml, mbstring, mcrypt, mysqli, mysqlnd, odbc, openssl, pcre, PDO, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite, pgsql, Phar, posix, pspell, recode, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, wddx, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib

# PHP Settings
max_execution_time - 3600
log_errors_max_len - 4096
max_file_uploads - 100
max_input_nesting_level - 64
max_input_time - 60
max_input_vars - 1000
memory_limit - 256M
post_max_size - 384M
upload_max_filesize - 256M
ldap.max_links - Unlimited
mbstring.regex_stack_limit - 100000
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
odbc.max_links - Unlimited
odbc.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
pgsql.max_links - Unlimited
pgsql.max_persistent - Unlimited
session.cache_limiter - no value
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 4000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

タグ:

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

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