Exemplo n.º 1
0
def actions_to_roles(actions):
    # Keep special values
    if not is_value(actions):
        return actions

    actions = ensure_plural(actions)
    return list(set([role for action in actions for role in ACTIONS[action]]))
Exemplo n.º 2
0
def roles_to_actions(roles):
    # Keep special values
    if not is_value(roles):
        return roles

    roles = ensure_plural(roles)
    return list(set([action for role in roles for action in ROLES[role]]))
Exemplo n.º 3
0
def actions_to_roles(actions):
    # Keep special values
    if not is_value(actions):
        return actions

    actions = ensure_plural(actions)
    return list(set([role for action in actions for role in ACTIONS[action]]))
Exemplo n.º 4
0
def roles_to_actions(roles):
    # Keep special values
    if not is_value(roles):
        return roles

    roles = ensure_plural(roles)
    return list(set([action for role in roles for action in ROLES[role]]))
    def _validate_actions(self, actions):
        if not is_value(actions):
            return actions

        actions = normalize_value(actions)

        if [action for action in actions if "." not in action]:
            raise ValueError("Prefixes are required since target is optional.")

        return actions
    def _prefix_actions(self, actions):
        """
        Prepend this model's name as prefix. This enforces more correct
        configuration when registering role/action mappings.
        """
        if not is_value(actions):
            return actions

        result = []
        for action in ensure_plural(actions):
            if "." in action:
                raise ValueError(
                    "Prefixes are inferred. Register this with its own "
                    "actions.")

            result.append("%s.%s" % (get_model_name(self.model), action))

        return result
    def _query_perms(self,
                     roles,
                     get_related_prefixes,
                     perms_name,
                     force_separate,
                     agent=ANY,
                     target=ANY):
        """
        This is an abstraction used by subclasses to query permissions.

        Roles will be normalized to a list of roles.

        force_separate is an optimization. If you know you are going
        to have multiple left joins, this will speed things up.

        Either agent or target can be provided. It's assumed that the
        queryset to be retrieved is the thing not provided.
        """
        # Normalize inputs
        roles = normalize_value(roles)
        agent = normalize_value(agent)
        target = normalize_value(target)

        # Get all possible related queries we're doing
        related_prefixes = (get_related_prefixes(self, perms_name, *roles)
                            if is_value(roles) else [perms_name])

        # Create a query for each related prefix
        queries = [
            self._get_query(roles, agent, target, prefix=prefix)
            for prefix in related_prefixes
        ]

        # Aggregate the queries. Query together if we don't have any
        # divergent left joins.
        query_together = (not force_separate and len(related_prefixes) <= 1
                          and perms_name in related_prefixes)

        if query_together:
            results = self._query_together(queries)
        else:
            results = self._query_separate(queries)

        return results
 def test_is_value(self):
     self.assertEqual(True, is_value('whatever'))
     self.assertEqual(False, is_value(ANY))
     self.assertEqual(False, is_value(NULL))