Thursday, 8 August 2019

How to add Admin panel in rails application

Add column:

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

end

4. 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

  Common Git Commands   Take clone of a repository git clone <remote-repository-url> ex: git clone  https://github.com/agricor/RegTech...