How to add Admin panel in rails application
rails g migration AddRoleToUsers role:string is_admin:boolean is_active:boolean
role, default: "member"
1. application controller with user over
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :user_admin, expect:[:after_sign_in_path_for]
include ApplicationHelper
layout :set_layout
before_action :configure_permitted_parameters, if: :devise_controller?
# before_action :check_subscription
def after_sign_in_path_for(resource)
resource.is_admin? ? admin_root_path : root_path
end
def user_admin
if request.fullpath.split("/")[1] == "admin"
if current_user.role != 'admin'
redirect_to root_path
else
request.url
end
else
end
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :password, :password_confirmation, :role, :first_name, :last_name, :image, :is_active, :is_admin])
devise_parameter_sanitizer.permit(:account_update, keys: [:email, :password, :password_confirmation, :role, :first_name, :last_name, :image, :is_active, :is_admin])
end
def authentication_admin!
unless current_user.is_admin?
flash[:alert] = "You are not authorized to perform this action."
redirect_to(request.referrer || root_path)
end
end
end
2. admin_controller
class AdminController < ApplicationController
layout 'admin'
before_action :authentication_admin!
def index
end
end
3. ApplicationHelper
module ApplicationHelper
def is_namespace_admin
begin
return false if !(request.base_url && request.url)
request.url.split(request.base_url)[1].split("/")[1] == "admin"
rescue => error
return false
end
end
def is_not_namespace_admin
!is_namespace_admin
end
def set_layout
is_namespace_admin ? "admin" : "application"
end
end4. routes
namespace :admin, module: nil do
root "admin#index"
resources :users
end
5. layout
6. config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( admin.css admin.js )
7.User.rb
def is_admin?
return true if self.role =="admin"
end