Skip to content

Commit 15b9d65

Browse files
committed
Confluence: Space permissions related methods #882
1 parent 61b1988 commit 15b9d65

File tree

2 files changed

+325
-1
lines changed

2 files changed

+325
-1
lines changed

atlassian/confluence.py

Lines changed: 245 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2425,7 +2425,7 @@ def get_all_members(self, group_name="confluence-users", expand=None):
24252425
else:
24262426
members.extend(values)
24272427
if not members:
2428-
print((f"Did not get members from {group_name} group, please check permissions or connectivity"))
2428+
print(f"Did not get members from {group_name} group, please check permissions or connectivity")
24292429
return members
24302430

24312431
def get_space(self, space_key, expand="description.plain,homepage", params=None):
@@ -3315,6 +3315,250 @@ def add_user_to_group(self, username, group_name):
33153315
url = "rest/api/user/%s/group/%s" % (username, group_name)
33163316
return self.put(url)
33173317

3318+
# Space Permissions
3319+
def get_all_space_permissions(self, space_key):
3320+
"""
3321+
Returns list of permissions granted to users and groups in the particular space.
3322+
:param space_key:
3323+
:return:
3324+
"""
3325+
url = f"rest/api/space/{space_key}/permissions"
3326+
return self.get(url)
3327+
3328+
def set_permissions_to_multiple_items_for_space(self, space_key, user_key=None, group_name=None, operations=None):
3329+
"""
3330+
Sets permissions to multiple users/groups in the given space.
3331+
Request should contain all permissions that user/group/anonymous user will have in a given space.
3332+
If permission is absent in the request, but was granted before, it will be revoked.
3333+
If empty list of permissions passed to user/group/anonymous user,
3334+
then all their existing permissions will be revoked.
3335+
If user/group/anonymous user not mentioned in the request, their permissions will not be revoked.
3336+
3337+
Maximum 40 different users/groups/anonymous user could be passed in the request.
3338+
:param space_key:
3339+
:param user_key:
3340+
:param group_name:
3341+
:param operations:
3342+
:return:
3343+
"""
3344+
url = f"rest/api/space/{space_key}/permissions"
3345+
params = []
3346+
3347+
if user_key:
3348+
params.append({"userKey": user_key, "operations": operations or []})
3349+
3350+
if group_name:
3351+
params.append({"groupName": group_name, "operations": operations or []})
3352+
3353+
if not user_key and not group_name:
3354+
params.append({"operations": operations or []})
3355+
payload_json = json.dumps(params)
3356+
return self.post(url, data=payload_json)
3357+
3358+
def get_permissions_granted_to_anonymous_for_space(self, space_key):
3359+
"""
3360+
Get permissions granted to anonymous user for the given space
3361+
:param space_key:
3362+
:return:
3363+
"""
3364+
url = f"rest/api/space/{space_key}/permissions/anonymous"
3365+
return self.get(url)
3366+
3367+
def set_permissions_to_anonymous_for_space(self, space_key, operations=None):
3368+
"""
3369+
Grant permissions to anonymous user in the given space. Operation doesn't override existing permissions,
3370+
will only add those one that weren't granted before. Multiple permissions could be passed in one request.
3371+
Supported targetType and operationKey pairs:
3372+
3373+
space read
3374+
space administer
3375+
space export
3376+
space restrict
3377+
space delete_own
3378+
space delete_mail
3379+
page create
3380+
page delete
3381+
blogpost create
3382+
blogpost delete
3383+
comment create
3384+
comment delete
3385+
attachment create
3386+
attachment delete
3387+
:param space_key:
3388+
:param operations:
3389+
:return:
3390+
"""
3391+
url = f"rest/api/space/{space_key}/permissions/anonymous"
3392+
data = {"operations": operations or []}
3393+
return self.put(url, data=data)
3394+
3395+
def remove_permissions_from_anonymous_for_space(self, space_key, operations=None):
3396+
"""
3397+
Revoke permissions from anonymous user in the given space.
3398+
If anonymous user doesn't have permissions that we are trying to revoke,
3399+
those permissions will be silently skipped. Multiple permissions could be passed in one request.
3400+
Supported targetType and operationKey pairs:
3401+
3402+
space read
3403+
space administer
3404+
space export
3405+
space restrict
3406+
space delete_own
3407+
space delete_mail
3408+
page create
3409+
page delete
3410+
blogpost create
3411+
blogpost delete
3412+
comment create
3413+
comment delete
3414+
attachment create
3415+
attachment delete
3416+
:param space_key:
3417+
:param operations:
3418+
:return:
3419+
"""
3420+
url = f"rest/api/space/{space_key}/permissions/anonymous/revoke"
3421+
data = {"operations": operations or []}
3422+
return self.put(url, data=data)
3423+
3424+
def get_permissions_granted_to_group_for_space(self, space_key, group_name):
3425+
"""
3426+
Get permissions granted to group for the given space
3427+
:param space_key:
3428+
:param group_name:
3429+
:return:
3430+
"""
3431+
url = f"rest/api/space/{space_key}/permissions/group/{group_name}"
3432+
return self.get(url)
3433+
3434+
def set_permissions_to_group_for_space(self, space_key, group_name, operations=None):
3435+
"""
3436+
Grant permissions to group in the given space.
3437+
Operation doesn't override existing permissions, will only add those one that weren't granted before.
3438+
Multiple permissions could be passed in one request. Supported targetType and operationKey pairs:
3439+
3440+
space read
3441+
space administer
3442+
space export
3443+
space restrict
3444+
space delete_own
3445+
space delete_mail
3446+
page create
3447+
page delete
3448+
blogpost create
3449+
blogpost delete
3450+
comment create
3451+
comment delete
3452+
attachment create
3453+
attachment delete
3454+
:param space_key:
3455+
:param group_name:
3456+
:param operations:
3457+
:return:
3458+
"""
3459+
url = f"rest/api/space/{space_key}/permissions/group/{group_name}"
3460+
data = {"operations": operations or []}
3461+
return self.put(url, data=data)
3462+
3463+
def remove_permissions_from_group_for_space(self, space_key, group_name, operations=None):
3464+
"""
3465+
Revoke permissions from a group in the given space.
3466+
If group doesn't have permissions that we are trying to revoke,
3467+
those permissions will be silently skipped. Multiple permissions could be passed in one request.
3468+
Supported targetType and operationKey pairs:
3469+
3470+
space read
3471+
space administer
3472+
space export
3473+
space restrict
3474+
space delete_own
3475+
space delete_mail
3476+
page create
3477+
page delete
3478+
blogpost create
3479+
blogpost delete
3480+
comment create
3481+
comment delete
3482+
attachment create
3483+
attachment delete
3484+
:param space_key:
3485+
:param group_name:
3486+
:param operations:
3487+
:return:
3488+
"""
3489+
url = f"rest/api/space/{space_key}/permissions/group/{group_name}/revoke"
3490+
data = {"operations": operations or []}
3491+
return self.put(url, data=data)
3492+
3493+
def get_permissions_granted_to_user_for_space(self, space_key, user_key):
3494+
"""
3495+
Get permissions granted to user for the given space
3496+
:param space_key:
3497+
:param user_key:
3498+
:return:
3499+
"""
3500+
url = f"rest/api/space/{space_key}/permissions/user/{user_key}"
3501+
return self.get(url)
3502+
3503+
def set_permissions_to_user_for_space(self, space_key, user_key, operations=None):
3504+
"""
3505+
Grant permissions to user in the given space.
3506+
Operation doesn't override existing permissions, will only add those one that weren't granted before.
3507+
Multiple permissions could be passed in one request. Supported targetType and operationKey pairs:
3508+
3509+
space read
3510+
space administer
3511+
space export
3512+
space restrict
3513+
space delete_own
3514+
space delete_mail
3515+
page create
3516+
page delete
3517+
blogpost create
3518+
blogpost delete
3519+
comment create
3520+
comment delete
3521+
attachment create
3522+
attachment delete
3523+
:param space_key:
3524+
:param user_key:
3525+
:param operations:
3526+
:return:
3527+
"""
3528+
url = f"rest/api/space/{space_key}/permissions/user/{user_key}"
3529+
data = {"operations": operations or []}
3530+
return self.put(url, data=data)
3531+
3532+
def remove_permissions_from_user_for_space(self, space_key, user_key, operations=None):
3533+
"""
3534+
Revoke permissions from a user in the given space.
3535+
If user doesn't have permissions that we are trying to revoke,
3536+
those permissions will be silently skipped. Multiple permissions could be passed in one request.
3537+
Supported targetType and operationKey pairs:
3538+
3539+
space read
3540+
space administer
3541+
space export
3542+
space restrict
3543+
space delete_own
3544+
space delete_mail
3545+
page create
3546+
page delete
3547+
blogpost create
3548+
blogpost delete
3549+
comment create
3550+
comment delete
3551+
attachment create
3552+
attachment delete
3553+
:param space_key:
3554+
:param user_key:
3555+
:param operations:
3556+
:return:
3557+
"""
3558+
url = f"rest/api/space/{space_key}/permissions/user/{user_key}/revoke"
3559+
data = {"operations": operations or []}
3560+
return self.put(url, params=data)
3561+
33183562
def add_space_permissions(
33193563
self,
33203564
space_key,

docs/confluence.rst

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,86 @@ Get spaces info
243243
# Get Space export download url
244244
confluence.get_space_export(space_key, export_type)
245245
246+
Get space permissions
247+
---------------------
248+
249+
.. code-block:: python
250+
251+
# Returns list of permissions granted to users and groups in the particular space.
252+
confluence.get_all_space_permissions(space_key)
253+
254+
# Sets permissions to multiple users/groups in the given space.
255+
confluence.set_permissions_to_multiple_items_for_space(self, space_key, user_key=None, group_name=None, operations=None)
256+
257+
# Get permissions granted to anonymous user for the given space
258+
confluence.get_permissions_granted_to_anonymous_for_space(space_key)
259+
260+
# Grant permissions to anonymous user in the given space.
261+
# Operation doesn't override existing permissions
262+
# will only add those one that weren't granted before.
263+
# Multiple permissions could be passed in one request.
264+
# Supported targetType and operationKey pairs:
265+
# space read
266+
# space administer
267+
# space export
268+
# space restrict
269+
# space delete_own
270+
# space delete_mail
271+
# page create
272+
# page delete
273+
# blogpost create
274+
# blogpost delete
275+
# comment create
276+
# comment delete
277+
# attachment create
278+
# attachment delete
279+
confluence.set_permissions_to_anonymous_for_space(space_key, operations=None)
280+
281+
# Remove permissions granted to anonymous user for the given space
282+
confluence.remove_permissions_granted_to_anonymous_for_space(space_key)
283+
284+
# Get permissions granted to group for the given space
285+
confluence.get_permissions_granted_to_group_for_space(space_key, user_key)
286+
287+
# Grant permissions to group in the given space.
288+
# Operation doesn't override existing permissions
289+
# will only add those one that weren't granted before.
290+
# Multiple permissions could be passed in one request.
291+
# Supported targetType and operationKey pairs:
292+
# space read
293+
# space administer
294+
# space export
295+
# space restrict
296+
# space delete_own
297+
# space delete_mail
298+
# page create
299+
# page delete
300+
# blogpost create
301+
# blogpost delete
302+
# comment create
303+
# comment delete
304+
# attachment create
305+
# attachment delete
306+
confluence.set_permissions_to_group_for_space(space_key, user_key, operations=None)
307+
308+
# Remove permissions granted to group for the given space
309+
confluence.remove_permissions_from_group_for_space(space_key, group_name)
310+
311+
# Get permissions granted to user for the given space
312+
confluence.get_permissions_granted_to_user_for_space(space_key, user_key)
313+
314+
# Grant permissions to user in the given space.
315+
confluence.set_permissions_to_user_for_space(space_key, user_key, operations=None)
316+
317+
# Remove permissions granted to user for the given space
318+
confluence.remove_permissions_from_user_for_space(space_key, user_key)
319+
320+
# Add permissions to a space
321+
confluence.add_space_permissions(space_key, user_key, group_name, operations)
322+
323+
# Remove permissions from a space
324+
confluence.remove_space_permissions(space_key, user_key, group_name, permission)
325+
246326
Users and Groups
247327
----------------
248328

0 commit comments

Comments
 (0)