routes.rbでDeviseの承認をやっていく。
いまDiscourse読んでるので思いついたやつを思いついたままメモってます。
constraintsを使います
User
というDevise用のモデルがあるとして、いわゆるcurrent_user
の取得成功を以て承認とします。
class Constraint::Config
def matches?(request)
!!warden(request).authenticate(scope: :user)
end
def warden(request)
request.env['warden']
end
end
scope :configs, module: :users, constraints: Constraint::Config.new do
get 'index', to: 'configs#index'
get 'password', to: 'passwords#edit'
put 'password', to: 'passwords#update'
end
get 'configs/*path', to: ->(env) { [403, {'Content-Type' => 'text/plain'}, ['forbidden']] }
DiscourseのadminルートではActionController::RoutingError
で投げっぱなしでしたが、ユーザーページであることを考慮して403
とか何か出すみたいな感じで。
ところでrequest_specでDeviseアカウントにサインインするには
request_specファイル内で
include Warden::Test::Helpers
しといて
login_as @user, scope: :user, :run_callbacks => false