Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)
        }
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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)
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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)
Exemplo n.º 21
0
    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
Exemplo n.º 22
0
    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