Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
123 lines (104 sloc) 7.06 KB

Step-to-Rails-Expert.rb 第6回

本日の流れ

自己紹介

  • お名前
  • 普段やっていること
  • 今日聞きたいこと、意気込みなど

参加者のお名前(時計回り)

  • ebi(主催者) LICTOOR株式会社でwebエンジニアをやっている。 普段はRubyやRailsを使って 聞きたいこと:初期プロダクトで導入するときどういう観点で入れているか聞きたい。
  • two_sann(スタッフ) 社内でRailsを使っています。 Rails version upに苦戦中。 認可Gemは使ったことがないので色々聞きたい
  • sinsokuさん groovesさん所属。forkwellを作っている。 昔cancancanを使っていたが今は・・・
  • ohtaさん sansanさん所属。前職ではcancancan使っていた。 今は使っていない。データモデリング・テーブル設計について聞きたい。

本編

  • 議論
  • 議題が終了した場合はフリートーク&もくもく

次回のテーマリクエスト・感想等(あれば)

締め

  • ebi GEM導入の観点について聞くことができてよかった。
  • two_san bankenの話や、運用周りの話を聞けてよかった。
  • sinsokuさん bankenとかの話を聞けてよかった。
  • ohtaさん gem使っていない人の話を聞けてよかった。

感想・次回のテーマリクエスト

特になし

議事メモ テーマ: 認可

書き方

  • h5タグ(#####)で書き込んでください。
  • もし該当する内容がない場合は、h6タグ以外でも適宜追記してもらって構いません。
  • 自分の書いた内容以外は削除・変更しないようお願いします。

Gem

CanCanCan

認証系Gemとの相性は?(ebi)

First, set up some authentication (such as Devise or Authlogic)

と記載あるので、deviseとauthlogicは使えるはず。 cancancanはAbilityクラスとcurrent_userメソッド存在を前提としているが、wikiのChanging Defaultsに記載されている方法にて対応できる

その他感想・意見
  • すごいdslって感じw
  • Abilityクラスの肥大化。デフォルトでabilityクラスを分離するような機能がない。みんな付け足すけど減らさないw
  • 逆に、「リソースが増えない」「権限がある程度の規模」などの前提が満たされている場合は有利になるのでは。

Pundit

認証系Gemとの相性は?(ebi)

readme

The first argument is a user. In your controller, Pundit will call the current_user method to retrieve what to send into this argument

と書いてある。punditもcurrent_userメソッドを前提としているので、当該メソッドが定義しているgemを使うか、もし異なる場合は何かしらの実装が必要

その他
  • punditはmodel毎に制御をかけるがcontrollerレベルで制御をかける場合は辛い。

  • るびまに詳しい記事がある。

banken

認証系Gemとの相性は?(ebi)

自作

どう設計すべき?
  • 参照系の話
    複雑でなければ、current_userからレコードを取得するようにしておく。find_by!すればNotFoundエラーになるので楽。
    その場合、NotAuthenticateエラーでなくて良いの?
    権限がないページにアクセスしたら、そのページが存在することがバレてはいけない場合、404の方が適切。

  • 権限のDB設計
    ユーザーテーブル・権限テーブル・役割テーブルプラスそれらを繋ぐ中間テーブルがフルセットのイメージ。ここから、どの程度妥協していくかは仕様次第。
    Linuxの権限設計(グループにも権限を付与できる)を参考にすると良い。
    また、redmineの権限の設計が参考になるのでは?
    AWSのIAMの権限は人類には早すぎたw

その他

認証系Gemとの相性という議題があったが、他の分野のGemでも相性が悪い場合がある

cancancanの#load_and_authorize_resourceaction_argesの機能とバッティングしてしまう。 基本的に、

  • 依存関係が多い
  • Railsの機能を使っている(上記の場合はcontrollerにクラスメソッドを生やしている) 場合は、そうでない場合に比べ比較的に問題が起きてしまう可能性が高い(もちろんそうでない場合もあるが)
面白めそっど

Sidekiq.❨╯°□°❩╯︵┻━┻
bankenのスライドを見てsinsokuさんが思い出したそうですww

認可系Gem導入の際、どのような観点で選定していますか?

個人的には、仕様とかが変わっていって、当該gemの想定する用途からずれて行き詰むのではという懸念があり、その辺教えてもらえると嬉しいです(認可周りとか特に仕様追加・変更が激しそう・・・)。 「認証系Gemとの相性という議題があったが、他の分野のGemでも相性が悪い場合がある」で述べられている点を気をつけると良い。あとは規模次第。そこまで大きくならないのであれば、自作でも良い。

modelsではなくpoliciesディレクトリを作って、権限の管理をすることについてどうか

  • 厳密に役割分割するのが難しそう punditの場合はcontrollerのアクション + ?のメソッドが定義されてる想定なので問題なさそうだけど、自作の時でやると責務の分割が難しそう
  • もし分割するなら、app/models配下にディレクトリを切っても良いのでは。

古くて使われてるかわからない権限、どうしてますか?

テストが揃っていても消すのは怖い・・・ ドキュメントを揃えその運用方法をしっかりと規定し運用していかないと、どれが必要でどれが不要かを後から判断するのは非常に大変そう。とはいえ、そのように運用するのも非常に難しい・・・ この問題は、長くサービスを運用している会社さんはどこも悩んでそう。

マスト丼

nullkalさんの記事

http://www.itmedia.co.jp/news/articles/1704/24/news045.html

https://github.com/tootsuite/mastodon/issues/1203

You can’t perform that action at this time.