ees_sharepoint/usergroup_permissions.py (34 lines of code) (raw):
#
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License 2.0;
# you may not use this file except in compliance with the Elastic License 2.0.
#
"""usergroup_permissions module allows to manage user permissions.
It can be used to fetch user permissions from Sharepoint Server
or clean permissions in Elastic Enterprise Search"""
SITES = "sites"
LISTS = "lists"
LIST_ITEMS = "list_items"
DRIVE_ITEMS = "drive_items"
class Permissions:
"""This class encapsulates all module logic."""
def __init__(self, sharepoint_client, workplace_search_custom_client, logger):
self.sharepoint_client = sharepoint_client
self.workplace_search_custom_client = workplace_search_custom_client
self.logger = logger
def fetch_users(self, key, rel_url, list_id="", item_id=""):
""" Invokes GET calls to fetch unique permissions assigned to an object
:param key: object key
:param rel_url: relative url to the sharepoint farm
:param list_id: list guid
:param item_id: item id
Returns:
Response of the GET call
"""
self.logger.info("Fetching the user roles for key: %s" % (key))
maps = {
SITES: "_api/web/roleassignments?$expand=Member/users,RoleDefinitionBindings",
LISTS: f"_api/web/lists(guid\'{list_id}\')/roleassignments?$expand=Member/users,RoleDefinitionBindings",
LIST_ITEMS: f"_api/web/lists(guid\'{list_id}\')/items({item_id})/roleassignments?$expand=Member/users,RoleDefinitionBindings",
DRIVE_ITEMS: f"_api/web/lists(guid\'{list_id}\')/items({item_id})/roleassignments?$expand=Member/users,RoleDefinitionBindings"
}
if not rel_url.endswith("/"):
rel_url = rel_url + "/"
return self.sharepoint_client.get(rel_url, maps[key], "permission_users")
def remove_all_permissions(self):
""" Removes all the permissions present in the workplace"""
try:
user_permission = self.workplace_search_custom_client.list_permissions()
if user_permission:
self.logger.info("Removing the permissions from the workplace...")
permission_list = user_permission['results']
for permission in permission_list:
self.workplace_search_custom_client.remove_permissions(permission)
except Exception as exception:
self.logger.exception("Error while removing the permissions from the workplace. Error: %s" % exception)
def fetch_groups(self, rel_url, userid):
""" Invokes GET calls to fetch the group roles for a user
:param rel_url: relative url to the sharepoint farm
:param userid: user id for fetching the roles
"""
self.logger.info("Fetching the group roles for userid: %s" % (userid))
return self.sharepoint_client.get(
rel_url, f"_api/web/GetUserById({userid})/groups", "permission_groups")