Revision 2dec184c
Added by Eric Helms over 8 years ago
app/controllers/api/v2/permissions_controller.rb | ||
---|---|---|
module Api
|
||
module V2
|
||
class PermissionsController < V2::BaseController
|
||
include Api::Version2
|
||
|
||
before_filter :find_resource, :only => %w{show}
|
||
before_filter :parameter_deprecation, :only => %w(index)
|
||
|
||
api :GET, "/permissions/", N_("List all permissions")
|
||
param :page, String, :desc => N_("paginate results")
|
||
param :per_page, String, :desc => N_("number of entries per request")
|
||
param_group :search_and_pagination, ::Api::V2::BaseController
|
||
param :resource_type, String
|
||
param :name, String
|
||
|
||
... | ... | |
type = params[:resource_type].blank? ? nil : params[:resource_type]
|
||
name = params[:name].blank? ? nil : params[:name]
|
||
if type
|
||
@permissions = Permission.where(:resource_type => type)
|
||
@permissions = Permission.where(:resource_type => type).paginate(paginate_options)
|
||
elsif name
|
||
@permissions = Permission.where(:name => name)
|
||
@permissions = Permission.where(:name => name).paginate(paginate_options)
|
||
else
|
||
@permissions = Permission.all
|
||
@permissions = resource_scope_for_index
|
||
end
|
||
@permissions = @permissions.paginate(paginate_options)
|
||
@permissions
|
||
end
|
||
|
||
api :GET, "/permissions/:id/", N_("Show a permission")
|
||
... | ... | |
@total = @resource_types.size
|
||
render :resource_types, :layout => 'api/v2/layouts/index_layout'
|
||
end
|
||
|
||
private
|
||
|
||
def parameter_deprecation
|
||
return true unless params[:resource_type] || params[:name]
|
||
Foreman::Deprecation.api_deprecation_warning(
|
||
"The name and resource_type parameters are deprecated, use search syntax to search by those parameters."
|
||
)
|
||
end
|
||
end
|
||
end
|
||
end
|
app/models/permission.rb | ||
---|---|---|
has_many :filterings, :dependent => :destroy
|
||
has_many :filters, :through => :filterings
|
||
|
||
scoped_search :on => :name, :complete_value => true
|
||
scoped_search :on => :resource_type
|
||
|
||
def self.resources
|
||
@all_resources ||= Permission.uniq.order(:resource_type).pluck(:resource_type).compact
|
||
end
|
test/unit/permission_test.rb | ||
---|---|---|
Permission.stubs(:with_translations).returns([['Z', 'z'], ['A', 'b'], ['H', 'a']])
|
||
assert_equal [['A', 'b'], ['H', 'a'], ['Z', 'z']], Permission.resources_with_translations
|
||
end
|
||
|
||
test "can search permissions by name" do
|
||
permission = FactoryGirl.create :permission, :domain, :name => 'view_all_domains'
|
||
as_admin do
|
||
permissions = Permission.search_for('name = view_all_domains')
|
||
assert_includes permissions, permission
|
||
end
|
||
end
|
||
|
||
test "can search permissions by resource_type" do
|
||
permission = FactoryGirl.create :permission, :domain, :name => 'view_all_domains'
|
||
as_admin do
|
||
permissions = Permission.search_for('resource_type = Domain')
|
||
assert_includes permissions, permission
|
||
end
|
||
end
|
||
end
|
Also available in: Unified diff
Fixes #11303: Allow scoped search by name for permissions.
This both provides this functionality and fixes an issue with creating
filters using hammer. Hammer attempts to search for a permission by
name using scoped search syntax when creating a filter with the
--permission=view_domains style syntax. However, this was defaulting to
returning all permissions instead of scoped permissions.