全体に公開した予定は、全員が編集・削除できてしまうガーン

参加者に公開にした予定は、参加者全員が編集・削除できてしまう叫び

参加者を自分だけにして登録するとその予定は自分のスケジュールにしか表示されないドクロ

全体に公開はするけど、編集・削除は作成者のみ、というのができないとグループウェアとしてはマズイのでは?

まぁ、無料のオープンソースだから仕方ないか。。。

予定に対するパーミッションを判断しているのは、DBに保存された「public_flag」で、制限がかかるのは[private]の値が入っている予定のみ。という設定になっているみたい。

制限といっても、予定そのものが表示されるかされないかだけで、編集削除に対する制限ではない。

仕方がないので、自分でなんとかしてみよう。

予定の「編集・削除」は登録者のみとしたいので、方法としては、DBへの書き込み制御をするか、「編集・削除」ボタンを表示させないか、という方法になると思う。

DBへの書き込み制御を行うとSQLいじったりするだろうから、バージョンアップに弱くなると考えて、後者を選択。

「予定の詳細」を表示させたときに、現在のログインユーザーのIDを取得して、表示されている予定の登録者IDと比較するこで制御しようと考えた。

「予定の詳細」ページは[webapp_biz]-[modules]-[templates]-「fh_biz_schedule_view.tpl」を元に表示されている。

ここで、予定の作成者(登録者)のIDは既に「$schedule.c_member」に格納されていることがわかる。

あとどうやってログインユーザーのIDを取得するかということになる。

このページへ各種の値を送り込んでいるのは、[webapp_biz]-[modules]-[biz]-[page]-「fh_schedule_view.php」なので、ここに変数を設定し、tplへ送り込めるようにする。

適当な位置に $this -> set('user_id',$u); と書き込む

これで、tpl側で「$user_id」として値を取得できるので、「fh_biz_schedule_view.tpl」を編集します。

83行目あたりにある「修正する」ボタンと「削除する」ボタンの[t_form_block]を以下の分岐条件でくくる。

({if intval($schedule.c_member_id) == intval($user_id)})

修正する

削除する

({/if})

なぜ、intvalなのかというと、ここではこうしないと値が取れない場合が出たため。原因は不明。
たぶんユーザーIDの取得は他にいい方法あるのだろうが、詳しくないのでこれでヨシとしておこいう。
また、他のページにある「予定の追加」ボタンもIDによって表示させる、させないの条件分岐が必要になってくる。

1.月間スケジュールを表示するページ

2.マイフレンドをクリックしたときに表示されるページ

1に関しては修正方法は同じです。

[webapp_biz]-[modules]-[biz]-「biz_schedule_calender.php」に $this->set('user_id',$u); を追加する。

[webapp_biz]-[modules]-[biz]-「biz_schedule_calender.tpl」の14行目あたりの「予定を追加する」ボタンの記述を条件分岐で囲む

2に関しては、smartyが絡んでくるので次回で記録しておきます。

おすすめの記事