カテゴリ | |
---|---|
サマリ | リンク情報は公開? |
バージョン | 1.4.2 |
投稿者 | コチ |
状態 | 完了 |
投稿日 | 2004-02-14 (SAT) 21:18:01 |
#relatedを使用した際に、閲覧権限のないページからのリンク情報も表示されるようです。被リンク情報はリンク元ページの内容の一部もしくは全部だと思いますが、あるページが「どのページへのリンクを含んでいるか」という情報も、ページ名や更新日時と同様に公開情報と扱ってよいということでしょうか?
現在#relatedに似た機能のプラグインを作っているのですが、閲覧制限がかかっている場合のリンク情報の扱いが微妙だったので質問させていただきます。
質問箱/269、質問箱/231参照。#relatedで表示されるページ名は、閲覧権限の有無とは無関係です。関係するのは$non_listだけです。
(ちょっと脱線しますが)じゃあ、$non_listのページは非公開情報なのか…と言われると、実際はcmd=filelistで表示されるので不完全な非公開情報でしかありません(list.inc.phpを見ると、わざとそうしているようです)。
list.inc.phpの一部を下記のように変更すれば、cmd=filelistでも$non_listは表示されなくなります。
// 一覧の取得 function get_list($withfilename) { global $non_list,$whatsnew; $pages = array_diff(get_existpages(),array($whatsnew)); - if (!$withfilename) - { $pages = array_diff($pages,preg_grep("/$non_list/",$pages)); - } if (count($pages) == 0)
ということで、閲覧規制したページを#relatedで表示しないようにするには、$non_listにも指定しておく必要があるということです。
ありがとうございます。つまり、閲覧制限を設定しただけではそのページの内容の一部が#ralatedなどで外に漏れることがあり*1、それを防ぐためには$non_listでページの存在自体を隠す必要がある*2ということでしょうか。個人的には上記の理由で#relatedでの表示の有無は$non_listよりも閲覧権限の方に依存するべきかと思いましたが、仕様という事で了解いたしました。製作中のプラグインもそれに従って作製することにします。
#relatedを閲覧制限に依存させにくいのは、閲覧制限はユーザーグループ($auth_users)によって複数存在しうるからです。Aというグループにとっては閲覧制限ページであっても、Bというグループにとっては閲覧制限ページでない場合もあるわけで…
foreach ($links as $page=>$lastmod) { if (preg_match("/$non_list/",$page)) { continue; } + if (read_auth($page) == FALSE) + { + continue; + } $r_page = rawurlencode($page);
まあ、やるとすればこうなるでしょうけど、この場合、AまたはBいずれかの閲覧制限になっている場合、表示されなくなります。Aの人にとっては閲覧できるはずのページが#relatedで表示されない、Bの人にとっては閲覧できるはずのページが#relatedで表示されない、ということが起こります。
#relatedで表示されないようにしても、RecentChangesや一覧で表示されてしまうから意味ないと思うんだけどなあ…。$non_listなら#related、RecentChanges、一覧のいずれでも表示されません。
うーん…では表現を変えます。例えばFrontPageに#ralatedと書いて表示される内容は、単語検索で”FrontPage”を検索した結果の大部分を含んでいますよね?これは$search_authを無視し得ることに当たらないでしょうか?*3
上に書いたように、「Aの人にとっては閲覧できるはずのページが#relatedで表示されない、Bの人にとっては閲覧できるはずのページが#relatedで表示されない」ことが起こってしまいます。そのほうがはるかに不便です。
検索については、$non_listに対しては$search_non_listで、閲覧制限ページについては$search_authで設定できるので、何の問題もありません。
閲覧制限ページを$non_listと同じ扱いにしたければ、$non_listに閲覧制限ページも指定しておけば済むことです*4。
了解しました。ありがとうございます。