app/controllers/spotlight/roles_controller.rb in blacklight-spotlight-0.4.1 vs app/controllers/spotlight/roles_controller.rb in blacklight-spotlight-0.5.0

- old
+ new

@@ -1,57 +1,61 @@ module Spotlight + ## + # CRUD actions for assigning exhibit roles to + # existing users class RolesController < Spotlight::ApplicationController - before_filter :authenticate_user! + before_action :authenticate_user! load_and_authorize_resource :exhibit, class: Spotlight::Exhibit load_and_authorize_resource through: :exhibit, except: [:update_all] def index role = @exhibit.roles.build authorize! :edit, role - + add_breadcrumb t(:'spotlight.exhibits.breadcrumb', title: @exhibit.title), @exhibit add_breadcrumb t(:'spotlight.administration.sidebar.header'), exhibit_dashboard_path(@exhibit) add_breadcrumb t(:'spotlight.administration.sidebar.users'), exhibit_roles_path(@exhibit) end def update_all - attrs = params.require(:exhibit).permit(:roles_attributes => [:id, :user_key, :role, :_destroy]) + authorize_nested_attributes! exhibit_params[:roles_attributes], Role - any_deleted = authorize_nested_attributes(attrs[:roles_attributes], Role) + any_deleted = exhibit_params[:roles_attributes].values.any? { |item| item['_destroy'].present? } - if @exhibit.update(attrs) - notice = any_deleted > 0 ? t(:'helpers.submit.role.destroyed') : t(:'helpers.submit.role.updated') - redirect_to exhibit_roles_path(@exhibit), notice: notice + if @exhibit.update(exhibit_params) + notice = any_deleted ? t(:'helpers.submit.role.destroyed') : t(:'helpers.submit.role.updated') + redirect_to exhibit_roles_path(@exhibit), notice: notice else flash[:alert] = t(:'helpers.submit.role.batch_error') render action: 'index' end - end protected + def exhibit_params + params.require(:exhibit).permit(roles_attributes: [:id, :user_key, :role, :_destroy]) + end # When nested attributes are passed in, ensure we have authorization to update each row. # @param attr [Hash,Array] the nested attributes # @param klass [Class] the class that is getting created # @return [Integer] a count of the number of deleted records - def authorize_nested_attributes(attrs, klass) - attrs = attrs.values if attrs.is_a? Hash - delete_count = 0 - attrs.each do |item| - if item[:id] - if item['_destroy'].present? - authorize! :destroy, klass.find(item[:id]) - delete_count += 1 - else - authorize! :update, klass.find(item[:id]) - end + def authorize_nested_attributes!(attrs, klass) + attrs.each do |_, item| + authorize_item item, klass + end + end + + def authorize_item(item, klass) + if item[:id] + if item['_destroy'].present? + authorize! :destroy, klass.find(item[:id]) else - authorize! :create, klass + authorize! :update, klass.find(item[:id]) end + else + authorize! :create, klass end - delete_count end - end end