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 add_role(self, name, tool_id): """ Add role is correct :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 = [role for role in tool.roles if role.name == name] if existing is not None and len(existing) > 0: raise ex.AlreadyExistsError('Role', 'name', name) new_role = self._add_role(self.ssn, name) # a_m.add_role_to_tool(self.ssn, new_role, tool) tool.roles.append(new_role) return new_role
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 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_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_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 get_features(self, tool_id): """ Return features 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 a_m.get_features_by_tool(self.ssn, tool)
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_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_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 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 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