Use role caching for Rolify to avoid N+1 queries
Resolves #2018 See https://github.com/RolifyCommunity/rolify#cached-roles-to-avoid-n1-issue
This commit is contained in:
parent
30ba7b133b
commit
98defe2d0f
13 changed files with 44 additions and 35 deletions
|
|
@ -13,10 +13,10 @@ module Admin
|
|||
redirect_to sign_in_path
|
||||
return false
|
||||
end
|
||||
unless (current_user.has_role? :organizer, :any) || (current_user.has_role? :cfp, :any) ||
|
||||
(current_user.has_role? :info_desk, :any) || (current_user.has_role? :organization_admin, :any) ||
|
||||
(current_user.has_role? :volunteers_coordinator, :any) ||
|
||||
(current_user.has_role? :track_organizer, :any) || current_user.is_admin
|
||||
unless (current_user.has_cached_role? :organizer, :any) || (current_user.has_cached_role? :cfp, :any) ||
|
||||
(current_user.has_cached_role? :info_desk, :any) || (current_user.has_cached_role? :organization_admin, :any) ||
|
||||
(current_user.has_cached_role? :volunteers_coordinator, :any) ||
|
||||
(current_user.has_cached_role? :track_organizer, :any) || current_user.is_admin
|
||||
raise CanCan::AccessDenied.new('You are not authorized to access this page.')
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ module Admin
|
|||
end
|
||||
|
||||
def assign_org_admins
|
||||
if @user.has_role? 'organization_admin', @organization
|
||||
if @user.has_cached_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}"
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ module Admin
|
|||
else
|
||||
flash[:error] = "Could not remove role #{@role.name} from user #{user.email}"
|
||||
end
|
||||
elsif user.has_role? @role.name, role_resource
|
||||
elsif user.has_cached_role? @role.name, role_resource
|
||||
flash[:error] = "User #{user.email} already has the role #{@role.name}"
|
||||
# Add user
|
||||
elsif user.add_role @role.name, role_resource
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ module Admin
|
|||
def index
|
||||
@conferences_with_role = current_user.is_admin? ? Conference.pluck(:short_title) : Conference.with_role([:organizer, :cfp, :info_desk], current_user).pluck(:short_title)
|
||||
|
||||
if current_user.has_role? :organization_admin, :any
|
||||
if current_user.has_cached_role? :organization_admin, :any
|
||||
@conferences_with_role = Organization.with_role('organization_admin', current_user).map { |org| org.conferences.pluck :short_title }.flatten
|
||||
end
|
||||
@conferences_with_role.uniq!
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue