add permissions and actions to assign and unassign organization admin role
This commit is contained in:
parent
4c1b56b54f
commit
db8fdb3d38
2 changed files with 45 additions and 5 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
module Admin
|
module Admin
|
||||||
class OrganizationsController < Admin::BaseController
|
class OrganizationsController < Admin::BaseController
|
||||||
load_and_authorize_resource :organization
|
load_and_authorize_resource :organization
|
||||||
|
before_action :verify_user, only: [:assign_org_admins, :unassign_org_admins]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@organizations = Organization.all
|
@organizations = Organization.all
|
||||||
|
|
@ -43,8 +44,49 @@ module Admin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def assign_org_admins
|
||||||
|
if @user.has_role? 'organization_admin', @organization
|
||||||
|
flash[:error] = "User #{@user.email} already has the role organization admin"
|
||||||
|
elsif @user.add_role 'organization_admin', @organization
|
||||||
|
flash[:notice] = "Successfully added role organization admin to user #{@user.email}"
|
||||||
|
else
|
||||||
|
flash[:error] = "Coud not add role organization admin to #{@user.email}"
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to admins_admin_organization_path(@organization)
|
||||||
|
end
|
||||||
|
|
||||||
|
def unassign_org_admins
|
||||||
|
if @user.remove_role 'organization_admin', @organization
|
||||||
|
flash[:notice] = "Successfully removed role organization admin from user #{@user.email}"
|
||||||
|
else
|
||||||
|
flash[:error] = "Could not remove role organization admin from user #{@user.email}"
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to admins_admin_organization_path(@organization)
|
||||||
|
end
|
||||||
|
|
||||||
|
def admins
|
||||||
|
@role = @organization.roles.first
|
||||||
|
@users = @role.users
|
||||||
|
render 'show_org_admins'
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def user_params
|
||||||
|
params.require(:user).permit(:email)
|
||||||
|
end
|
||||||
|
|
||||||
|
def verify_user
|
||||||
|
@user = User.find_by(email: user_params[:email])
|
||||||
|
unless @user
|
||||||
|
redirect_to admins_admin_organization_path(@organization),
|
||||||
|
error: 'Could not find user. Please provide a valid email!'
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def organization_params
|
def organization_params
|
||||||
params.require(:organization).permit(:name, :description, :picture)
|
params.require(:organization).permit(:name, :description, :picture)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ class AdminAbility
|
||||||
conference.registration_open? && !conference.registration_limit_exceeded? || conference.program.speakers.confirmed.include?(user)
|
conference.registration_open? && !conference.registration_limit_exceeded? || conference.program.speakers.confirmed.include?(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
can :index, Organization
|
can [:index, :admins], Organization
|
||||||
can :index, Ticket
|
can :index, Ticket
|
||||||
can :manage, TicketPurchase, user_id: user.id
|
can :manage, TicketPurchase, user_id: user.id
|
||||||
can [:new, :create], Payment, user_id: user.id
|
can [:new, :create], Payment, user_id: user.id
|
||||||
|
|
@ -96,13 +96,11 @@ class AdminAbility
|
||||||
org_ids_for_organization_admin = Organization.with_role(:organization_admin, user).pluck(:id)
|
org_ids_for_organization_admin = Organization.with_role(:organization_admin, user).pluck(:id)
|
||||||
conf_ids_for_organization_admin = Conference.where(organization_id: org_ids_for_organization_admin).pluck(:id)
|
conf_ids_for_organization_admin = Conference.where(organization_id: org_ids_for_organization_admin).pluck(:id)
|
||||||
|
|
||||||
can [:read, :update, :destroy], Organization, id: org_ids_for_organization_admin
|
can [:read, :update, :destroy, :assign_org_admins, :unassign_org_admins, :admins], Organization, id: org_ids_for_organization_admin
|
||||||
can :new, Conference
|
can :new, Conference
|
||||||
can :manage, Conference, organization_id: org_ids_for_organization_admin
|
can :manage, Conference, organization_id: org_ids_for_organization_admin
|
||||||
can [:index, :show], Role
|
can [:index, :show], Role
|
||||||
can [:edit, :update], Role do |role|
|
|
||||||
role.resource_type == 'Organization' && (org_ids_for_organization_admin.include? role.resource_id)
|
|
||||||
end
|
|
||||||
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
signed_in_with_organizer_role(user, conf_ids_for_organization_admin)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue