Blog

concrete5、上級権限モード+コンポーザーの注意点

Posted by admin at 12:07 日時 2014/01/09

「見たまま直感的に操作できる」のがウリのconcrete5ですが、既存コンテンツの編集や自由にレイアウトを作りながらの編集には便利でも、毎度似たような記事を量産するには「編集モード」は不向きです。そのような時に、ブログのようにタイトルを入れて、本文をいれて、タグを入力して…のような固定の投稿画面を作成することができます。それが「コンポーザー」機能です。

とても便利なのですが、上級権限モードと組み合わせて管理者以外のユーザーにコンポーザーを介して記事を書かせようとした際に、コンポーザーの「書く」ページにアクセスしても、「下書き」ページに飛ばされてしまうという現象が起こることがあります。

管理者グループであれば初期設定で全ての権限を持っているのでコンポーザーも問題なく使用できます。上記のような現象も起こりません。また、トップページに対して権限設定を行なえば、管理画面の「下書き」ページもトップページの権限設定を継承するので、この場合も特別に権限を調整する必要はありません。ただし、サイト内の一部に対して権限を制限したユーザーにコンポーザーを使わせたい場合は、下記のような権限設定の調整が必要になりますので、注意してください。

  • ログインユーザーが、コンポーザーで追加しようとしているページタイプの「プロパティを編集」と「コンテンツを編集」、「テーマを変更」の権限を持っている必要があります。
  • ログインユーザーが、「下書き」ページ(フルサイトマップで「システムページを表示」にチェックすると出てきます)に対して、「サブページを追加」権限を持っている必要があります。
  • 「下書き」ページの「サブページ権限」が「ページタイプのデフォルトの権限設定を継承する。」になっている必要があります。
  • ログインユーザーが、コンポーザーで追加しようとしているページの「公開場所」のページに対して、「サブページを追加」権限を持っている必要があります。

コンポーザーの使い方についてはconcrete5 Japan公式サイトの「コンポーザーの設定と使い方」も参考にしてください。

管理画面のコンポーザーのページにはコンポーザー設定している全てのページタイプが表示されますが、さらにログインユーザーごとに書き込み権限があるページタイプだけ表示されてほしい!と要望が出てくるかと思いますが、現時点のconcrete5はそこまでチェックしていません。カスタマイズで対応する場合は、下記のPHPを controllers/dashboard/composer/write.php に設置することで実現できます。

<?php
defined('C5_EXECUTE') or die("Access Denied.");
class DashboardComposerWriteController extends Concrete5_Controller_Dashboard_Composer_Write {
public function view($ctID = false) {
$ct = $this->setCollectionType($ctID);
if (!is_object($ct)) {
$ctArray = CollectionType::getComposerPageTypes();
// check write permission of each composer page types
$_ctArray = $ctArray;
$ctArray = array();
foreach($_ctArray as $_ct){
$ctMasterCID = $_ct->getMasterCollectionID();
$ctMasterCollection = Page::getByID($ctMasterCID);
$p = new Permissions($ctMasterCollection);
if($p->canWrite()){
$ctArray[] = $_ct;
}
}
if (count($ctArray) == 1) {
$ct = $ctArray[0];
$this->redirect('/dashboard/composer/write', $ct->getCollectionTypeID());
exit;
}
$this->set('ctArray', $ctArray);
//$this->redirect('/dashboard/composer');
} else {
// create a new page of this type
$entry = ComposerPage::createDraft($ct);
if (is_object($entry)) {
$this->redirect('/dashboard/composer/write', 'edit', $entry->getCollectionID());
} else {
$this->redirect('/dashboard/composer/drafts');
}
}
}}
view raw write.php hosted with ❤ by GitHub

Share this entry