FlatPress.info

Information & blog

非公開(管理者のみ)領域の設定

さてさて、前回の記事「トップ画面の設定(ToDo)」で最初に表示されるトップ画面に ToDo が表れて便利に活用しましょう、という流れになっていました。ところで、このToDo管理は管理者のプライベートな利用を目的としているので、非公開にしておくのが望ましいと思います。そこで、以下のようなカスタマイズ計画を立てました。

  • ToDoページは管理者がログオンしないと表示されない。ログオンしてない状態であれば、別の何等かのページなりを表示させる。
  • 「プライベート」というカテゴリー(1個)のみは、ToDo同様にログオン後でないと表示されない。
  • 検索画面においても「プライベート」カテゴリと「ToDo」のタイトル(ToDoは固定ページ)記事は管理者のみ表示される。
  • ToDo はiframeで表示されるのでここへの直接アクセスを何らかの方法で防ぐ。

結果は、こんな感じで表示されるようになるでしょう。

private-area-close

ログオンで ToDo を表示、通常表示はそのままとする

/flatpress.world/index.php について、追加判定を加えました。固定ページ名が"ToDo"であり、かつログインしている場合のみ、この固定ページが表示されます。ログインしていない状況であれば、「管理パネル」の「設定」で指定された固定ページか通常表示かに従って表示がなされます。

        function index_main() {

                global $fpdb, $smarty, $fp_config, $fp_params;

                $params = array();
                $module = 'index.tpl' ;
                $can404 = true;

        // FlatPress.info
        if ($_GET['m'] == "smode") {
          $smarty->assign('smode', 'title');
          $flag = "smode";
        } else {
          $smarty->assign('smode', '');
          $flag = "";
        }

                if (!empty($fp_params['entry'])) {

                        index_singlepost($params, $module);

                } elseif (

                        ($explicit_req = $page = @$fp_params['page']) ||
                        (empty($fp_params) && $page = @$fp_config['general']['startpage'])

                        ) {

          //FlatPress.info
          if ($page == "ToDo") {
            if (user_loggedin()) {
                                        index_staticpage($page, $explicit_req, $params, $module);
                                        return $module;
            }
          } else {
                                        index_staticpage($page, $explicit_req, $params, $module);
                                        return $module;
          }

                } elseif (!empty($_GET['q'])) {
                        include('search.php');
                        $module = search_main();
                } else {

                        if (!empty($fp_params['feed'])){

                                        $can404=false;

                                        switch($fp_params['feed']) {
                                                case 'atom':
                                                        header('Content-type: application/atom+xml');
                                                        $module = SHARED_TPLS . 'atom.tpl';
                                                        break;
                                                case 'rss2':
                                                default:
                                                        header('Content-type: application/rss+xml');
                                                        $module = SHARED_TPLS . 'rss.tpl';
                                        }


                        }

                        index_showposts($params, $module);

                }

                $params['fullparse'] = true;

 

iframe のURLへの直接アクセスを防止する

検索してみると、iframe のURLへの直接アクセスを完全防止するような方法が明記されている情報が無い様子でした。ひとつの案として、URL のget パラメータに特定のキーワード(例えば、todo.php?iframe=true)を含ませておいて、これを検出して良しとするものでしたが、HTML ソースを見るとそれは見えてしまいます。ここでは、下に示すようにひとつ前のページが自分のサイト(のURLの文字列が含まれている)かどうかをチェックする($_SERVER['HTTP_REFERER'])方法で対応したところです。この方法が完璧かどうか自信はありませんが、ToDo の内容自体が"Remember The Milk"なので、これでOKとしておきましょう。

/APP/todo/todo.php に下記のような追加をしておきました。todo.php に直接のアクセスが生じた場合は下に示すメッセージとなります。

function echoOption($val, $selectedVal) {
    if ($val == $selectedVal) {
        $selected = 'selected="selected"';
    }
    echo "<option $selected>$val</option>\n";
}
//----------------------------------------------
// FlatPress.info
$itsme = "http://flatpress.world/";
if(!strstr($_SERVER['HTTP_REFERER'], $itsme)) {
  die("You can not directly access this page.<br>Please try to access the top page.");
}

$todo = new Todo($_REQUEST['cat']);
$todo->setUp();
?>
<!DOCTYPE html>
<html lang="ja">

 

not-direct-access-todo

 

 

「プライベート」カテゴリを非公開にする

上述で「ToDo」のページ(iframeにより見える独立したプログラム)を管理者のみに公開することができましたが、カテゴリとして「プライベート」に指定した記事は同様にログインしないと見えないようにカスタマイズしました。テンプレートを次のように変更します。経緯がわかるようにコメントが多数残ってますので、若干醜い状態ではあります。

MEMO:

  1. {assign var="private" value=$categories|@filed} はカテゴリの情報を取り出す。
  2. $private|strip_tags:false はリンク情報まで含んでいるのでこれを削除している。

まずは「プライベート」というカテゴリを作成し、そのカテゴリのプライベート情報を書き込みます。その後は、ログインしないとこの記事が見えない状態となります。下に続く三つのスクリーンショットを参考にしてください。

 

 

 

/fp-interface/themes/leggero/entry-default.tpl

        <div id="{$id}" class="entry {$date|date_format:"y-%Y m-%m d-%d"}">
                {*      using the following way to print the date, if more   *}
                {*      than one entry have been written the same day,  *}
                {*       the date will be printed only once                  *}

            {$date|date_format_daily:"<h2 class=\"date\">`$fp_config.locale.dateformat`</h2>"}

<!-- FlatPress.info -->
{assign var="private" value=$categories|@filed}
{if $login_status == 'login'}
                <h3>
                <a href="/{$id|link:post_link}">
                {$subject|tag:the_title}
                </a>
                </h3>
                {include file=shared:entryadminctrls.tpl}

<!-- FlatPress.info -->
{if !$smode}
                                {$content|tag:the_content}
{/if}

<!-- FlatPress.info -->
                <ul class="entry-footer">
<!--
                <li class="entry-info">Posted by {$author} at
                {$date|date_format}
                {if ($categories)} in {$categories|@filed}{/if}
                </li>

                {if !(in_array('commslock', $categories) && !$comments)}
                <li class="link-comments">
                <a href="/{$id|link:comments_link}#comments">{$comments|tag:comments_number}
                 {if isset($views)}(<strong>{$views}</strong> views){/if}
                </a>
                </li>
                {/if}
-->

                </ul>
<!--
                        {$date|date_format_daily:"<h2 class=\"date2\">`$fp_config.locale.dateformat`</h2>"}
-->
{elseif $private|strip_tags:false != 'プライベート'}
                <h3>
                <a href="/{$id|link:post_link}">
                {$subject|tag:the_title}
                </a>
                </h3>
                {include file=shared:entryadminctrls.tpl}

<!-- FlatPress.info -->
{if !$smode}
                                {$content|tag:the_content}
{/if}

<!-- FlatPress.info -->
                <ul class="entry-footer">
<!--
                <li class="entry-info">Posted by {$author} at
                {$date|date_format}
                {if ($categories)} in {$categories|@filed}{/if}
                </li>

                {if !(in_array('commslock', $categories) && !$comments)}
                <li class="link-comments">
                <a href="/{$id|link:comments_link}#comments">{$comments|tag:comments_number}
                 {if isset($views)}(<strong>{$views}</strong> views){/if}
                </a>
                </li>
                {/if}
-->

                </ul>
<!--
                        {$date|date_format_daily:"<h2 class=\"date2\">`$fp_config.locale.dateformat`</h2>"}
-->
{elseif $private|strip_tags:false == 'プライベート'}
Private area.
{/if}
    </div>

private-area-login private-area private-area-close

 

FlatPess 記事

Copyright c  flatpress.info 2015. All Rights Reserved.