def add_user_to_group(self, user_id, group_id): """ TEMPRORARY DOESN'T WORK Add user to group :param user_id: :type user_id: :param group_id: :type group_id: :return: :rtype: """ # Validate inputs user_id = _get_id_or_err(user_id, 'user_id') group_id = _get_id_or_err(group_id, 'group_id') # Get objects user = a_m.get_user_by_id(self.ssn, user_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) group = a_m.get_user_group_by_id(self.ssn, group_id) if group is None: raise ex.NotExistsError('UserGroup', 'id', group_id) if user in group.users: raise ex.AlreadyExistsError('UserGroup', 'users', user.id) return group.users.append(user)
def get_group_data_permissions(self, group_id, tool_id): """ TEMPRORARY DOESN'T WORK TO DO Method don't return anything Ver.1 - Get data by group Q:Why to put tool_id if data models_managers is fully defined by group_id? :param group_id: :type group_id: :param tool_id: :type tool_id: :return: :rtype: """ # Validate inputs tool_id = _get_id_or_err(tool_id, 'tool_id') group_id = _get_id_or_err(group_id, 'group_id') # Get objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) group = a_m.get_user_group_by_id(self.ssn, group_id) if group is None: raise ex.NotExistsError('UserGroup', 'id', group_id) return a_m.get_data_permission(group_id)
def update_group_data_permissions(self, group_id, permisssions_id): """ TEMPRORARY DOESN'T WORK :param group_id: :type group_id: :param permisssions_id: :type permisssions_id: :return: :rtype: """ group_id = _get_id_or_err(group_id, 'group_id') group = a_m.get_user_group_by_id(self.ssn, group_id) group_data_perm = [data_perm.id for data_perm in group.data_perm] to_keep = set(group_data_perm).intersection(permisssions_id) # Delete if len(group_data_perm) > len(permisssions_id): delete_ids = set(group_data_perm) - set(to_keep) a_m.del_perm_data_from_group(self.ssn, group_id, delete_ids) #TO DO del_perm_data_from_group # Add if len(group_data_perm) > len(to_keep): add = set(permisssions_id) - set(to_keep) to_add_features = [x for x in permisssions_id if x.id in add] a_m.add_perm_data_from_group(self.ssn, group_id, to_add_features) #TO DO add_perm_data_from_group return to_keep
def get_feature(self, **kwargs): """ Args: **kwargs: id|name & tool_id """ if 'id' in kwargs: feature_id = _get_id_or_err(kwargs['id'], 'id') return a_m.get_feature_by_id(self.ssn, feature_id) elif 'name' in kwargs and 'tool_id' in kwargs: name = _get_str_or_err(kwargs['name'], 'name') tool_id = _get_id_or_err(kwargs['tool_id'], 'tool_id') tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) return a_m.get_feature_by_name_in_tool(self.ssn, name, tool)
def add_group(self, name, tool_id): """ Add user group to Tool :param name: :type name: :param tool_id: :type tool_id: :return: :rtype: """ # Validate inputs name = _get_str_or_err(name, 'name') tool_id = _get_id_or_err(tool_id, 'tool_id') # Get Objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) existing = [ug for ug in tool.user_groups if ug.name == name] # TODO Check if existing is not None and isinstance(existing, list): raise ex.AlreadyExistsError('UserGroup', 'name', name) return self._add_user_group(self.ssn, name, tool)
def add_permission(self, tool_id, node_type, name, parent_id=None): tool_id = _get_id_or_err(tool_id, 'tool_id') node_type = _get_str_or_err(node_type, 'node_type') # Defined string name = _get_str_or_err(name, 'name') tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) parent = None if parent_id is not None: parent_id = _get_id_or_err(parent_id, 'parent_id') parent = a_m.get_perm_node_in_tool(self.ssn, parent_id, tool) if parent is None: raise ex.NotExistsError('PermNode', 'id', parent_id) return a_m.add_perm_node(self.ssn, tool, node_type, name, parent)
def add_permission_value(self, tool_id, perm_node_id, value, user_id): tool_id = _get_id_or_err(tool_id, 'tool_id') perm_node_id = _get_id_or_err(perm_node_id, 'perm_node_id') user_id = _get_id_or_err(user_id, 'user_id') tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) user = a_m.get_user_by_id(self.ssn, user_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) perm_node = a_m.get_perm_node_in_tool(self.ssn, perm_node_id, tool) if perm_node is None: raise ex.NotExistsError('PermNode', 'id', perm_node_id) return a_m.add_perm_value(self.ssn, tool, perm_node, value, user)
def get_permissions(self, tool_id, user_id): tool_id = _get_id_or_err(tool_id, 'tool_id') user_id = _get_id_or_err(user_id, 'user_id') tool = wha.get_tool_by_id(self.ssn, tool_id) user = wha.get_user_by_id(self.ssn, user_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) # default_perms = wha.get_perms_to_tool(ssn, tool) # wha.get_user_perms_to_tool(sess, tool, user), return { 'permissions': wha.get_perms_to_tool(self.ssn, tool, user), 'features': wha.get_user_features_to_tool(self.ssn, tool, user) }
def init_user_wb(self, user_id, tool_id): # Validate inputs tool_id = _get_id_or_err(tool_id, 'tool_id') user_id = _get_id_or_err(user_id, 'user_id') # Get Objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) user = a_m.get_user_by_id(self.ssn, user_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) # Version 2 # Get raw data from table with masks raw_perm_values = a_m.get_raw_perm_values_for_user( self.ssn, tool, None) # Copy/Insert this raw data for specified user # TODO - check if there is no data for this user!!! for per_v in raw_perm_values: perm_node = per_v.perm_node a_m.add_perm_value(self.ssn, tool, perm_node, per_v.value, user) # TODO Fix bug with initialize db # # Get recently created permissions for user iaccess = _IAccess(ssn=self.ssn) u_perms = iaccess.get_permissions(tool_id, user_id) # self.istorage.backup.save(user_id, tool_id, u_perms, 'models_managers') # # Make backup file # dir_path = os.path.dirname(os.path.realpath(__file__)) # file_name = "backup_tool_" + str(tool_id) + "_user_" \ # + str(user_id) + ".json" # file_path = os.path.join(dir_path, file_name) # with open(file_path, "w+") as backup_file: # json.dump(u_perms, backup_file) pass # TODO Confirm This Realization
def get_tool(self, **kwargs): """ Args: **kwargs: id|email """ if 'id' in kwargs: tool_id = _get_id_or_err(kwargs['id'], 'id') return a_m.get_tool_by_id(self.ssn, tool_id) elif 'name' in kwargs: name = _get_str_or_err(kwargs['name'], 'name') return a_m.get_tool_by_name(self.ssn, name)
def get_user(self, **kwargs): """ Args: **kwargs: id|email """ if 'id' in kwargs: user_id = _get_id_or_err(kwargs['id'], 'id') return a_m.get_user_by_id(self.ssn, user_id) elif 'email' in kwargs: email = _get_str_or_err(kwargs['email'], 'email') return a_m.get_user_by_email(self.ssn, email)
def get_role(self, **kwargs): """ Args: **kwargs: id|name """ if 'id' in kwargs: role_id = _get_id_or_err(kwargs['id'], 'id') return a_m.get_role_by_id(self.ssn, role_id) elif 'name' in kwargs: name = _get_str_or_err(kwargs['name'], 'name') return a_m.get_role_by_name(self.ssn, name)
def update_user_data_permissions(self, tool_id, user_id, permissions): """ TEMPRORARY DOESN'T WORK :param tool_id: :type tool_id: :param user_id: :type user_id: :param permissions: :type permissions: :return: :rtype: """ #TODO # Validate inputs tool_id = _get_id_or_err(tool_id, 'user_id') user_id = _get_id_or_err(user_id, 'user_id') # Get objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) user = a_m.get_user_by_id(self.ssn, user_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) # TODO Validating paths for nodes # Delete previous permissions for user a_m.del_perm_values_for_user(self.ssn, tool, user) # Get objects storage = {} permissions = sorted(permissions, key=lambda p: len(p['path'])) for perm in permissions: self._add_permission(tool, storage, perm, user)
def get_user_roles(self, user_id): """ Return Users Role's :param user_id: :type user_id: :return: :rtype: """ user_id = _get_id_or_err(user_id, 'user_id') user = a_m.get_user_by_id(self.ssn, user_id) if user is None: raise ex.NotExistsError('User', 'id', user_id) return user.roles
def get_role_features(self, role_id): """ Return Features related to Role :param role_id: :type role_id: :return: :rtype: """ # Validate inputs role_id = _get_id_or_err(role_id, 'id') # Get Objects role = a_m.get_role_by_id(self.ssn, role_id) if role is None: raise ex.NotExistsError('Role', 'id', role_id) return role.features
def get_roles(self, tool_id): """ Return roles related to given tool :param tool_id: :type tool_id: :return: :rtype: """ # Validate inputs tool_id = _get_id_or_err(tool_id, 'tool_id') # Get Objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) return tool.roles
def update_role_features(self, role_id, features_id): """ Update role by given list of features. Delete non common features, and add new :param role_id: :type role_id: :param features_id: :type features_id: :return: :rtype: """ # Validate inputs role_id = _get_id_or_err(role_id, 'id') if features_id is None or not isinstance(features_id, list): raise ex.WrongArgEx('features_id', features_id) # Get Objects role = a_m.get_role_by_id(self.ssn, role_id) if role is None: raise ex.NotExistsError('Role', 'id', role_id) new_features = [] for fid in features_id: f = a_m.get_feature_by_id(self.ssn, fid) if f is not None: new_features.append(f) else: raise ex.NotExistsError('Feature', 'id', fid) old_f = [x.id for x in role.features] new_f = features_id to_keep = set(old_f).intersection(new_f) # Delete if len(old_f) > len(to_keep): delete_ids = set(old_f) - set(to_keep) self._del_features_from_role(self.ssn, role, delete_ids) # Add if len(new_f) > len(to_keep): add = set(new_f) - set(to_keep) to_add_features = [x for x in new_features if x.id in add] self._add_features_to_role(self.ssn, role, to_add_features) return role.features
def get_users(self, tool_id=None): """ Return user object by given tool :param tool_id: :type tool_id: :return: :rtype: """ # Validate inputs & Get object if tool_id is not None: tool_id = _get_id_or_err(tool_id, 'tool_id') tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) return a_m.get_users_by_tool(self.ssn, tool) return a_m.get_all_users(self.ssn)
def get_group_users(self, group_id): """ Return Get User of Specific Group :param group_id: :type group_id: :return: :rtype: """ # Validate inputs group_id = _get_id_or_err(group_id, 'group_id') # Get objects group = a_m.get_user_group_by_id(self.ssn, group_id) if group is None: raise ex.NotExistsError('UserGroup', 'id', group_id) return group.users
def add_user(self, email, password, roles_id=None): # Validate inputs #email = _get_str_or_err(email, 'email') #password = _get_str_or_err(password, 'password') # TODO Hashing Pass # Get Objects roles = [] if roles_id is not None and isinstance(roles_id, list): for role_id in roles_id: role_id = _get_id_or_err(role_id, 'id') role = a_m.get_role_by_id(self.ssn, role_id) if role is None: raise ex.NotExistsError('Role', 'id', role_id) else: roles.append(role) existing = a_m.get_user_by_email(self.ssn, email) if existing is not None: raise ex.AlreadyExistsError('User', 'email', email) return self._add_user(self.ssn, email, password, roles)
def add_data_permissions_to_group(self, group_id, permisssions_id): """ TEMPRORARY DOESN'T WORK :param group_id: :type group_id: :param permisssions_id: :type permisssions_id: :return: :rtype: """ group_id = _get_id_or_err(group_id, 'group_id') group = a_m.get_user_group_by_id(self.ssn, group_id) permissions = [] for perm_id in permisssions_id: if perm_id in [perm.id for perm in group.data_perm]: pass else: perm_data_access = a_m.get_data_permission_by_id(perm_id) permissions.append(perm_data_access) group.data_perm.append(perm_data_access) return permissions
def set_permissions_template(self, tool_id, template): # Validate inputs tool_id = _get_id_or_err(tool_id, 'tool_id') if 'permissions' not in template or \ not isinstance(template['permissions'], list): raise ex.WrongArgEx('permissions', template.get('permissions')) if 'features' not in template or \ not isinstance(template['features'], list): raise ex.WrongArgEx('features', template.get('features')) feats = template['features'] perms = template['permissions'] # Get objects tool = a_m.get_tool_by_id(self.ssn, tool_id) if tool is None: raise ex.NotExistsError('Tool', 'id', tool_id) # Create & validate features dict for adding features_to_add = [] for _f in feats: features_to_add.append({'name': _f.get('name')}) # Add permissions perms = sorted(perms, key=lambda perm: len(perm['path'])) storage = {} for perm in perms: self._add_permission(tool, storage, perm) # Add default features for tool if len(features_to_add) > 0: for f in features_to_add: a_m.add_feature(self.ssn, f['name'], tool) return None