Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/rails_admin/extensions/pundit/authorization_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ def authorize(action, abstract_model = nil, model_object = nil)
if action && !policy(record).send(action_for_pundit(action))
raise ::Pundit::NotAuthorizedError.new("not allowed to #{action} this #{record}")
end
@controller.instance_variable_set(:@_pundit_policy_authorized, true)
end

# This method is called primarily from the view to determine whether the given user
Expand Down
24 changes: 24 additions & 0 deletions spec/controllers/rails_admin/main_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,30 @@ class TeamWithNumberedPlayers < Team
expect(JSON.parse(response.body).first['id']).to be_a_kind_of String
end
end

context 'when authorizing requests with pundit' do
if defined?(Devise::Test)
include Devise::Test::ControllerHelpers
else
include Devise::TestHelpers
end

controller(RailsAdmin::MainController) do
include ::Pundit
after_action :verify_authorized
end

it 'performs authorization' do
RailsAdmin.config do |c|
c.authorize_with(:pundit)
c.authenticate_with { warden.authenticate! scope: :user }
c.current_user_method(&:current_user)
end
login_as FactoryGirl.create :user, roles: [:admin]
player = FactoryGirl.create :player, team: (FactoryGirl.create :team)
expect { get :show, model_name: 'player', id: player.id }.not_to raise_error
end
end
end

describe 'sanitize_params_for!' do
Expand Down
67 changes: 0 additions & 67 deletions spec/integration/authorization/pundit_spec.rb
Original file line number Diff line number Diff line change
@@ -1,72 +1,5 @@
require 'spec_helper'

class ApplicationPolicy
attr_reader :user, :record

def initialize(user, record)
@user = user
@record = record
end

def show?
user.roles.include? :admin
end

def destroy?
false
end

def history?
user.roles.include? :admin
end

def show_in_app?
user.roles.include? :admin
end

def dashboard?
user.roles.include? :admin
end

def index?
false
end

def new?
user.roles.include? :admin
end

def edit?
user.roles.include? :admin
end

def export?
user.roles.include? :admin
end

def rails_admin_index?
true
end
end

class PlayerPolicy < ApplicationPolicy
def new?
(user.roles.include?(:create_player) || user.roles.include?(:admin) || user.roles.include?(:manage_player))
end

def edit?
(user.roles.include? :manage_player)
end

def destroy?
(user.roles.include? :manage_player)
end

def index?
user.roles.include? :admin
end
end

describe 'RailsAdmin Pundit Authorization', type: :request do
before(:all) do
ApplicationController.send :include, ::Pundit
Expand Down
66 changes: 66 additions & 0 deletions spec/policies.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
class ApplicationPolicy
attr_reader :user, :record

def initialize(user, record)
@user = user
@record = record
end

def show?
user.roles.include? :admin
end

def destroy?
false
end

def history?
user.roles.include? :admin
end

def show_in_app?
user.roles.include? :admin
end

def dashboard?
user.roles.include? :admin
end

def index?
false
end

def new?
user.roles.include? :admin
end

def edit?
user.roles.include? :admin
end

def export?
user.roles.include? :admin
end

def rails_admin_index?
true
end
end

class PlayerPolicy < ApplicationPolicy
def new?
(user.roles.include?(:create_player) || user.roles.include?(:admin) || user.roles.include?(:manage_player))
end

def edit?
(user.roles.include? :manage_player)
end

def destroy?
(user.roles.include? :manage_player)
end

def index?
user.roles.include? :admin
end
end
1 change: 1 addition & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
require 'rspec/rails'
require 'factory_girl'
require 'factories'
require 'policies'
require 'database_cleaner'
require "orm/#{CI_ORM}"

Expand Down