У вас нет прав доступа к этой странице. при попытке связаться с администратором - PullRequest
0 голосов
/ 13 октября 2019

Каждый раз, когда я пытаюсь подключиться к своему бэк-офису с помощью администратора, я получаю это. Вы не авторизованы для доступа к этой странице. даже если все настроено так, чтобы принимать администраторов. Я проверил, и все мои сотрудники - администраторы, поэтому этого не следует делать!

Я пытался ограничить права основных пользователей, я пытался получить доступ к странице с каждой учетной записью, но всегда получаю этоошибка, даже если все сотрудники являются администраторами!

способность.rb


class Ability
  include CanCan::Ability

  def initialize(employee)
  employee ||= Employee.new # guest employee (not logged in)
  if employee.admin?
    can :access, :rails_admin       # only allow admin employees to access Rails Admin
    can :read, :dashboard
    can :manage, :all
    authorize!(:dashboard, @employee)
  end
end
end 

employee_controller.rb

class EmployeesController < ApplicationController
    def employee_params
        params.require(:employee).permit(:email, :encrypted_password, :password_confirmation, :role)
      end
end

available.rb


module Accessible
    extend ActiveSupport::Concern
    included do
      before_action :check_employee
    end

    protected
    def check_employee
      if current_employee.admin
        flash.clear
        redirect_to(rails_admin.dashboard_path) && return
      elsif current_employee
        flash.clear
        redirect_to(new_employee_session_path) && return
      end
    end
  end

rails_admin.rb


RailsAdmin.config do |config|

  config.parent_controller = "::ApplicationController"

  config.authorize_with do |controller|
    if current_employee.admin?
      redirect_to main_app.new_account_session_path, flash: {error: 'Please Login to Continue..'}
    elsif !current_employee.admin?
      redirect_to main_app.root_path, flash: {error: 'You are not Admin'}
    end
  end


  ## == CancanCan ==
  config.authorize_with :cancancan

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

  end
end

rout.rb

Rails.application.routes.draw do

devise_for :users, path: 'users'

devise_for :employees, path: 'employee'

  namespace :user do
    resources :users
  end

  namespace :employee do
    resources :employees
  end

  mount RailsAdmin::Engine => '/admin', as: 'rails_admin'

  root 'index#Index'

  get '/Index', to: 'index#Index'

  get '/ResidentialServices', to: 'pages#ResidentialServices'

  get '/CorporateServices', to: 'pages#CorporateServices'

  get '/Quotes', to: 'pages#Quotes'

  get '/Awards', to: 'pages#Awards'

end

добавить администратора к миграции сотрудников

class AddAdminToEmployees < ActiveRecord::Migration[5.2]
  def change
    add_column :employees, :admin, :boolean, default: false
  end
end

сотрудника (вы можете видеть, что я установилмой админ в true:

Employee.create!(lastName: 'xxx', firstName: 'xxx', title: 'Comm Rep', email: 'xxx@xx.xx', encrypted_password: BCrypt::Password.create('123456'), admin: 'true')

я ожидаю, что администраторы смогут получить доступ к backoffice

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

cancancan ожидает current_user, а не current_employee

cancancan ожидает current_user вспомогательный метод, а не current_employee вспомогательный метод - я предполагаю, что это вспомогательный метод, который у вас есть, если выиспользуя разработанное сокровище.

Вы можете проверить, инициализирован ли сотрудник, которому вы передаете метод способностей, с помощью отладчика, например, byebug - я думаю, он вообще не был инициализирован. Короче говоря, вам нужно сообщить cancancan, что вы используете current_employee, а не current_user

Вот быстрый способ, который должен сделать это для вас:

class ApplicationController < ActionController::Base
  alias_method :current_user, :current_employee
end
0 голосов
/ 13 октября 2019

Разве вы не должны передавать переменную вместо переменной экземпляра в powers.rb?

authorize!(:dashboard, employee)

вместо

authorize!(:dashboard, @employee)
...