From f565ce153af01acf3e5c77077479b9ac354304db Mon Sep 17 00:00:00 2001 From: Bogdanova Olga Date: Wed, 17 Mar 2021 20:32:30 +0300 Subject: [PATCH 1/2] Add endpoints to get user permissions --- .../api/PermissionApiController.php | 67 +++++++++++++++++++ DebugPlugin/openapi/permission.yml | 52 ++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 DebugPlugin/controllers/api/PermissionApiController.php create mode 100644 DebugPlugin/openapi/permission.yml diff --git a/DebugPlugin/controllers/api/PermissionApiController.php b/DebugPlugin/controllers/api/PermissionApiController.php new file mode 100644 index 0000000..5e4a380 --- /dev/null +++ b/DebugPlugin/controllers/api/PermissionApiController.php @@ -0,0 +1,67 @@ +permission('Garden.Settings.Manage'); + if (!Gdn::userModel()->getID($userID)) { + throw notFoundException('User'); + } + $userPermissions = Gdn::userModel()->getPermissions($userID); + $data = [ + 'userPermissions' => $userPermissions, + ]; + return $data; + } + + /** + * Get user permissions for a category + * @param $userID + * @param $categoryID + * @return Data + * @throws \Garden\Web\Exception\HttpException + * @throws \Vanilla\Exception\PermissionException + */ + public function get($userID, $categoryID) { + $this->permission('Garden.Settings.Manage'); + + if (!Gdn::userModel()->getID($userID)) { + throw notFoundException('User'); + } + + $category = CategoryModel::categories($categoryID); + if (!$category) { + throw notFoundException('Category'); + } + $groupID = val('GroupID', $category, null); + $data = [ + 'GroupID' => $groupID, + 'PermsGroupView' => $groupID? GroupModel::getGroupRoleFor($userID, $groupID) : null, + 'PermsDiscussionsView' => CategoryModel::checkPermission($category, 'Vanilla.Discussions.View', true, $userID), + 'PermsDiscussionsAdd' => CategoryModel::checkPermission($category, 'Vanilla.Discussions.Add', true, $userID), + 'PermsDiscussionsEdit' => CategoryModel::checkPermission($category, 'Vanilla.Discussions.Edit', true, $userID), + 'PermsCommentsAdd' => CategoryModel::checkPermission($category, 'Vanilla.Comments.Add', true, $userID), + 'PermsDiscussionsUploads' => CategoryModel::checkPermission($category, 'Vanilla.Discussions.Uploads', true, $userID), + 'PermsCommentsUploads' => CategoryModel::checkPermission($category, 'Vanilla.Comments.Uploads', true, $userID) + ]; + return $data; + } +} \ No newline at end of file diff --git a/DebugPlugin/openapi/permission.yml b/DebugPlugin/openapi/permission.yml new file mode 100644 index 0000000..63c826a --- /dev/null +++ b/DebugPlugin/openapi/permission.yml @@ -0,0 +1,52 @@ +openapi: 3.0.2 +info: Vanilla Permission API +paths: + /permission/{userID}/{categoryID}: + get: + parameters: + - description: UserID to check. + in: path + name: userID + schema: + type: integer + - description: CategoryID to check. + in: path + name: categoryID + schema: + type: integer + responses: + '200': + content: + 'application/json': + schema: + items: + $ref: '#/components/schemas/Records' + type: array + description: Success + tags: + - Data + summary: List records. + /permission/{userID}: + get: + parameters: + - description: UserID to check. + in: path + name: userID + schema: + type: integer + responses: + '200': + content: + 'application/json': + schema: + items: + $ref: '#/components/schemas/Records' + type: array + description: Success + tags: + - Data + summary: List records. +components: + schemas: + Records: + type: object \ No newline at end of file From c2edfbfb040d623f005c0ff60e7d11245d4b9ca5 Mon Sep 17 00:00:00 2001 From: Bogdanova Olga Date: Wed, 17 Mar 2021 20:33:42 +0300 Subject: [PATCH 2/2] Add endpoints to get user permissions --- DebugPlugin/controllers/api/PermissionApiController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DebugPlugin/controllers/api/PermissionApiController.php b/DebugPlugin/controllers/api/PermissionApiController.php index 5e4a380..dd47f1d 100644 --- a/DebugPlugin/controllers/api/PermissionApiController.php +++ b/DebugPlugin/controllers/api/PermissionApiController.php @@ -9,7 +9,7 @@ use Vanilla\ApiUtils; /** - * SQL API Controller for the `/sql` resource. + * Permission API Controller for the `/permission` resource. */ class PermissionApiController extends AbstractApiController {