ページタイプの表示権限で設定されたグループIDの取得

2016年7月27日 at 20:42

みなさん、こんにちは

いつもお世話になっております。
頻繁な投稿ですが、ご容赦ください。

タイトルの件につきまして、

コンポーザーによるページ作成時に
ページのタイプで設定されている権限の内、
表示に設定されているグループのIDを取得したいと考えています。

ご存知の方がいらっしゃいましたら、ご教授よろしくお願いします。

タグ:

Re: ページタイプの表示権限で設定されたグループIDの取得

2016年8月18日 at 0:21
まず、表示権限はグループだけではなくユーザーやグループの組み合わせなどのが登録できます。

それらを総称してアクセスエンティティといいます。

英語の公式ドキュメントは
http://documentation.concrete5.org/developers/permissions-access-security/checking-permissions-against-custom-user
なのですが、
これを参考に・・・


$key = \Concrete\Core\Permission\Key\Key::getByHandle('view_page');
$key->setPermissionObject($c);
$access = $key->getPermissionAccessObject();
$accessEntities = $access->getAccessListItems();
$groupIDs = array();
foreach ($accessEntities as $accessEntity) {
$entityObject = $accessEntity->getAccessEntityObject();
if ($entityObject->getAccessEntityTypeHandle() =='group') {
$groupIDs[] = $entityObject->getGroupObject()->getGroupID();
}
}


下記、1行毎の解説です。

Permission List
http://documentation.concrete5.org/developers/permissions-access-security/full-permission-list
より、'view_page' が表示権限のキーであることを調べ

現在表示しているページの権限になるようにセットします。 場合によっては $c が null になる場合があるので $c = Page::getCurrentPage(); してやってください。

そこからの2行で、その権限があるエンティティを取り出します。

この $entityObject にそのページで閲覧が許可されているアクセスエンティティ(ユーザー、グループ、グループセット等)のオブジェクトが格納されています。

ここで、グループエンティティのみを取り出し、その中からグループオブジェクトを取り出して、グループ ID を取得しています。

サンプルプログラムはグループ ID を $groupIDs の配列に入れています。