Add query param to filter users on 'external' & 'blocked' type on API
This commit is contained in:
parent
c6d0109867
commit
a0aaf93fe5
4 changed files with 45 additions and 1 deletions
4
changelogs/unreleased/23731-add-param-to-user-api.yml
Normal file
4
changelogs/unreleased/23731-add-param-to-user-api.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Add query param to filter users by external & blocked type
|
||||
merge_request: 7109
|
||||
author: Yatish Mehta
|
|
@ -33,6 +33,18 @@ GET /users
|
|||
]
|
||||
```
|
||||
|
||||
In addition, you can filter users based on states eg. `blocked`, `active`
|
||||
This works only to filter users who are `blocked` or `active`.
|
||||
It does not support `active=false` or `blocked=false`.
|
||||
|
||||
```
|
||||
GET /users?active=true
|
||||
```
|
||||
|
||||
```
|
||||
GET /users?blocked=true
|
||||
```
|
||||
|
||||
### For admins
|
||||
|
||||
```
|
||||
|
@ -120,6 +132,8 @@ For example:
|
|||
GET /users?username=jack_smith
|
||||
```
|
||||
|
||||
You can search for users who are external with: `/users?external=true`
|
||||
|
||||
## Single user
|
||||
|
||||
Get a single user.
|
||||
|
|
|
@ -10,6 +10,9 @@ module API
|
|||
# GET /users
|
||||
# GET /users?search=Admin
|
||||
# GET /users?username=root
|
||||
# GET /users?active=true
|
||||
# GET /users?external=true
|
||||
# GET /users?blocked=true
|
||||
get do
|
||||
unless can?(current_user, :read_users_list, nil)
|
||||
render_api_error!("Not authorized.", 403)
|
||||
|
@ -19,8 +22,10 @@ module API
|
|||
@users = User.where(username: params[:username])
|
||||
else
|
||||
@users = User.all
|
||||
@users = @users.active if params[:active].present?
|
||||
@users = @users.active if to_boolean(params[:active])
|
||||
@users = @users.search(params[:search]) if params[:search].present?
|
||||
@users = @users.blocked if to_boolean(params[:blocked])
|
||||
@users = @users.external if to_boolean(params[:external]) && current_user.is_admin?
|
||||
@users = paginate @users
|
||||
end
|
||||
|
||||
|
|
|
@ -48,6 +48,17 @@ describe API::API, api: true do
|
|||
end['username']).to eq(username)
|
||||
end
|
||||
|
||||
it "returns an array of blocked users" do
|
||||
ldap_blocked_user
|
||||
create(:user, state: 'blocked')
|
||||
|
||||
get api("/users?blocked=true", user)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response).to all(include('state' => /(blocked|ldap_blocked)/))
|
||||
end
|
||||
|
||||
it "returns one user" do
|
||||
get api("/users?username=#{omniauth_user.username}", user)
|
||||
expect(response).to have_http_status(200)
|
||||
|
@ -69,6 +80,16 @@ describe API::API, api: true do
|
|||
expect(json_response.first.keys).to include 'last_sign_in_at'
|
||||
expect(json_response.first.keys).to include 'confirmed_at'
|
||||
end
|
||||
|
||||
it "returns an array of external users" do
|
||||
create(:user, external: true)
|
||||
|
||||
get api("/users?external=true", admin)
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response).to all(include('external' => true))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue