スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Prev.    Category    Next 

プラグイン開発記 - 権限のチェックと自分がメンバのプロジェクト一覧

今回は用語集プラグインで表示対象のプロジェクトを変えた場合の 2 つのバグを修正。
  1. http://www.r-labs.org/issues/767
  2. http://www.r-labs.org/issues/745


一つ目はすべてのプロジェクトを選択した場合、本当に全てのプロジェクトを表示していた。権限をチェックしていなかったので、用語集に対して表示権限のあるプロジェクトの全てとするように変更する。

まず、みれるプロジェクトでないといけないので、公開または自分のプロジェクトの一覧を取得する必要がある。これには Redmine のプロジェクトの一覧が参考になりそうだったので、ソース(app/controllers/projects_controller.rb)をみてみると表示可能なプロジェクトの一覧は以下のようにして取得していた。
Project.visible.find(:all, :order => 'lft') 
順番の lft はよくわからないが、これで表示可能なプロジェクトの一覧は持って来れそう。
これをさらに権限で絞れるようにする。

今度はlink_to_if_authorized のメソッドが参考になりそうなので、ソースを grep してみると app/helpers/application_helper.rb に定義があった。
  def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
end

さらに今度は authorize_for で grep してみる。同じファイルに定義があった。
  def authorize_for(controller, action)
User.current.allowed_to?({:controller => controller, :action => action}, @project)
end
これが探していたやつ。
表示可能な一覧を取ってきて、これを使ってプロジェクト絞り込んで、そのプロジェクトの id でデータベース検索するように修正することにしてみる。


二つ目は自分の属するプロジェクトの一覧が上手く表示できないバグ。また、この一覧も権限をチェックしおく必要がある。
バグの原因はよくわからないが、 とりあえず Redmine のソースを参考に修正することにする。
Redmine の上部に自分の属するプロジェクトのプルダウンメニューがでるのでそれを参考にしてみる。
どこにでも出てきているので、レイアウトじゃないかと思って app/views/layouts をみてみると base.rhtml で render_project_jump_box でプルダウンを作ってた。
helper っぽいので grep かけると app/helpers/application_helper.rb に定義があった。
  def render_project_jump_box
return unless User.current.logged?
projects = User.current.memberships.collect(&:project).compact.uniq
# :
collect(&:project) の意味が分からない。普通だと & は論理積なのだが違いそう、 collect のブロックもないし。
こんな ruby の文法変えているのは Rails しかいねぇってことで rails collect &ググってみる
いろいろヒットしたのでみてみると、やっぱり ActiveRecord の拡張らしく、これでプロジェクトの一覧がとれるようなので、これを使う。
http://www.pistolfly.jp/weblog/2008/05/activerecordmapcollect.html

前のソースを見てみると途中までしか書いてなかった。
User.current.memberships
どうやら、ちょっとしかデータのない Redmine でテストしていたから、プロジェクトの ID 番号とユーザーの ID 番号が偶然一致していてチェック通してしまったらしい。

また、自分の属するプロジェクトの選択項目は属するプロジェクトがあるかどうかを見て、表示/ 非表示を切り替えていた。こっちも同じ間違いだったので、同様の方法で直せるが、検索するの時間がかかるといけないのでやめることにする。
ただ、ログインしていない状態(Non-member)で自分の属するプロジェクトが見えるのも変な感じがするので、表示/ 非表示を切り替えはログインしているかどうかだけにする。

表示プロジェクトの対象を変えて、権限のあるプロジェクト一覧を取得する処理は後で改造する用語の移動やカテゴリの一覧取得でも使うので、使えそうな形で helper にメソッドを追加しておく。
このメソッドを使うように変更して修正完了。


Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応
(2008/05/31)
大場 寧子、大場 光一郎 他

商品詳細を見る
関連記事
スポンサーサイト
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
11位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
2位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

07月 | 2017年08月 | 09月
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。