]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/Api/UserApiController.php
Refactored existing user API work
[bookstack] / app / Http / Controllers / Api / UserApiController.php
1 <?php
2
3 namespace BookStack\Http\Controllers\Api;
4
5 use BookStack\Auth\User;
6 use BookStack\Auth\UserRepo;
7 use Closure;
8
9 class UserApiController extends ApiController
10 {
11     protected $userRepo;
12
13     protected $fieldsToExpose = [
14         'email', 'created_at', 'updated_at', 'last_activity_at', 'external_auth_id'
15     ];
16
17     protected $rules = [
18         'create' => [
19         ],
20         'update' => [
21         ],
22     ];
23
24     public function __construct(UserRepo $userRepo)
25     {
26         $this->userRepo = $userRepo;
27     }
28
29     /**
30      * Get a listing of users in the system.
31      * Requires permission to manage users.
32      */
33     public function list()
34     {
35         $this->checkPermission('users-manage');
36
37         $users = $this->userRepo->getApiUsersBuilder();
38
39         return $this->apiListingResponse($users, [
40             'id', 'name', 'slug', 'email', 'external_auth_id',
41             'created_at', 'updated_at', 'last_activity_at',
42         ], [Closure::fromCallable([$this, 'listFormatter'])]);
43     }
44
45     /**
46      * View the details of a single user.
47      * Requires permission to manage users.
48      */
49     public function read(string $id)
50     {
51         $this->checkPermission('users-manage');
52
53         $singleUser = $this->userRepo->getById($id);
54         $this->singleFormatter($singleUser);
55
56         return response()->json($singleUser);
57     }
58
59     /**
60      * Format the given user model for single-result display.
61      */
62     protected function singleFormatter(User $user)
63     {
64         $this->listFormatter($user);
65         $user->load('roles:id,display_name');
66         $user->makeVisible(['roles']);
67     }
68
69     /**
70      * Format the given user model for a listing multi-result display.
71      */
72     protected function listFormatter(User $user)
73     {
74         $user->makeVisible($this->fieldsToExpose);
75         $user->setAttribute('profile_url', $user->getProfileUrl());
76         $user->setAttribute('edit_url', $user->getEditUrl());
77         $user->setAttribute('avatar_url', $user->getAvatar());
78     }
79 }