diff options
author | Romain <romdum@users.noreply.github.com> | 2021-10-12 12:47:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 12:47:19 +0200 |
commit | d0a681fbc3fb626adcddbbb13f8c96c0bbd72c02 (patch) | |
tree | ed807f45d54993e20f63af81d9d964ddc2f258fe /routers/api/v1/org/org.go | |
parent | 7b8723158e2a50834617f47b07c29f5436fede6d (diff) | |
download | gitea-d0a681fbc3fb626adcddbbb13f8c96c0bbd72c02.tar.gz gitea-d0a681fbc3fb626adcddbbb13f8c96c0bbd72c02.zip |
[API] Add endpount to get user org permissions (#17232)
* Add endpoint
* Add swagger response + generate swagger
* Stop execution if user / org is not found
* Add tests
Co-authored-by: 6543 <6543@obermui.de>
Diffstat (limited to 'routers/api/v1/org/org.go')
-rw-r--r-- | routers/api/v1/org/org.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index cf4c328ebb..d3aa92f46d 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -97,6 +97,77 @@ func ListUserOrgs(ctx *context.APIContext) { listUserOrgs(ctx, u) } +// GetUserOrgsPermissions get user permissions in organization +func GetUserOrgsPermissions(ctx *context.APIContext) { + // swagger:operation GET /users/{username}/orgs/{org}/permissions organization orgGetUserPermissions + // --- + // summary: Get user permissions in organization + // produces: + // - application/json + // parameters: + // - name: username + // in: path + // description: username of user + // type: string + // required: true + // - name: org + // in: path + // description: name of the organization + // type: string + // required: true + // responses: + // "200": + // "$ref": "#/responses/OrganizationPermissions" + // "403": + // "$ref": "#/responses/forbidden" + // "404": + // "$ref": "#/responses/notFound" + + var u *models.User + if u = user.GetUserByParams(ctx); u == nil { + return + } + + var o *models.User + if o = user.GetUserByParamsName(ctx, ":org"); o == nil { + return + } + + op := api.OrganizationPermissions{} + + if !models.HasOrgOrUserVisible(o, u) { + ctx.NotFound("HasOrgOrUserVisible", nil) + return + } + + authorizeLevel, err := o.GetOrgUserMaxAuthorizeLevel(u.ID) + if err != nil { + ctx.Error(http.StatusInternalServerError, "GetOrgUserAuthorizeLevel", err) + return + } + + if authorizeLevel > models.AccessModeNone { + op.CanRead = true + } + if authorizeLevel > models.AccessModeRead { + op.CanWrite = true + } + if authorizeLevel > models.AccessModeWrite { + op.IsAdmin = true + } + if authorizeLevel > models.AccessModeAdmin { + op.IsOwner = true + } + + op.CanCreateRepository, err = o.CanCreateOrgRepo(u.ID) + if err != nil { + ctx.Error(http.StatusInternalServerError, "CanCreateOrgRepo", err) + return + } + + ctx.JSON(http.StatusOK, op) +} + // GetAll return list of all public organizations func GetAll(ctx *context.APIContext) { // swagger:operation Get /orgs organization orgGetAll |