質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

4342閲覧

Railsで管理画面を実装する時の設計について

yamitake

総合スコア27

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/04/05 05:18

初めましてヤミタケと申します。
RailsでDeviseを用いて管理画面を実装することについて質問させてください。

DeviseでAdminユーザーを作り,ログイン認証を用いて admin/以下のアクセスを制御したい時、
僕は3通り程の実装方法を思いつくのですが、どのように組むのがきれいにわかりやすくできますでしょうか?

Railsのコーディング規約や思想など正しく理解できていないかもしれないので、そこも踏まえてアドバイス頂けると幸いです。

adminようのroutes.rb
# routes.rb # admin/以下はadminの認証を必要とする。 controllers/admin/配下にcontrollerを配置する。 devise_for :admins, # path: "admin", path_names: { sign_in: 'login', sign_out: 'logout' } , controllers: { sessions: "admin/sessions" } namespace :admin do root 'dashboard#index' resouces :items ##//// ## admin画面で管理していくもの ##//// end
共通でかけたい処理(とりあえず)
layout 'admin' before_action :authenticate_admin!

1 concernsに共通処理を書いて各コントローラーで読み込む。

などの記述をcontrollers/concerns/adminable.rb などに記述し、admin/以下のcontrollerでそれぞれincludeする。


2 継承元のcontrollerを作成して共通処理を記述する。

controllers/admin/Admin/base_controller.rb などを記述して共通処理をここに書く

class Admin::DashboardController < Admin::BaseController

3 cancan,rolifyなどのgemで権限管理を行う。

admin配下のCRUDの権限をadmin以外与えないようにする。


管理画面のあるシステムは何度か作ってきたことがありますが、作り方がしっくりこずに色々考えていました。
こういう考えがあるなどの気づきでもいいので教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

参考になるかわかりませんが、自身の経験では、
2のパターンが一番やりやすいというか、わかりやすかったです。

Admin::BaseControllerのbefore_filterとかでオブジェクトの引き回し及び権限チェック処理などしておけば、
同一NameSpaceのコントローラではその辺を意識せずに書けるので。
また、before_filterの呼び出し順も理解しやすいですし。

(Moduleでもbefore_filterを宣言できますが、書き方が変化球な感じがするので、あんまりしっくり来ません)

ただ、deviceやcancan,rolify等のgemは活用した事がないので、比較は出来ません。

投稿2016/04/06 05:13

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamitake

2016/04/07 06:31

ありがとうございます。経験の話ですごい参考になります。 よくある実装なのでベストプラクティスがあればと思い質問させていただきました。
rifuch

2016/04/07 07:25

自分の経験だけなので、他の方の意見も是非聞いてみたいですね。 ただ、やっている中では、コントローラはスーパークラスにまとめ、モデルの方はModuleに切り出すパターンが一番自然になるような気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問