Пример #1
0
def load_implied_roles(permissions, source_contexts_to_rolenames,
                       all_context_implications):
    """Load roles from implied contexts

  Args:
      permissions (dict): dict where the permissions will be stored
      source_contexts_to_rolenames (dict): Role names for contexts
      all_context_implications (list): List of possible context implications
  Returns:
      None
  """
    # Gather all roles required by context implications
    implied_context_to_implied_roles = {}
    all_implied_roles_set = set()
    for context_implication in all_context_implications:
        for rolename in source_contexts_to_rolenames.get(
                context_implication.source_context_id, []):
            implied_role_names_list = implied_context_to_implied_roles.setdefault(
                context_implication.context_id, list())
            implied_role_names = lookup_role_implications(
                rolename, context_implication)
            all_implied_roles_set.update(implied_role_names)
            implied_role_names_list.extend(implied_role_names)
    # If some roles are required, query for them in bulk
    all_implied_roles_by_name = {}
    if implied_context_to_implied_roles and all_implied_roles_set:
        implied_roles = db.session.query(Role)\
            .filter(Role.name.in_(all_implied_roles_set))\
            .options(sqlalchemy.orm.undefer_group('Role_complete'))\
            .all()
        for implied_role in implied_roles:
            all_implied_roles_by_name[implied_role.name] = implied_role
    # Now aggregate permissions resulting from these roles
    for implied_context_id, implied_rolenames \
            in implied_context_to_implied_roles.items():
        if implied_context_id is None:
            continue
        for implied_rolename in implied_rolenames:
            implied_role = all_implied_roles_by_name[implied_rolename]
            collect_permissions(implied_role.permissions, implied_context_id,
                                permissions)
Пример #2
0
def load_implied_roles(permissions, source_contexts_to_rolenames,
                       all_context_implications):
  """Load roles from implied contexts

  Args:
      permissions (dict): dict where the permissions will be stored
      source_contexts_to_rolenames (dict): Role names for contexts
      all_context_implications (list): List of possible context implications
  Returns:
      None
  """
  # Gather all roles required by context implications
  implied_context_to_implied_roles = {}
  all_implied_roles_set = set()
  for context_implication in all_context_implications:
    for rolename in source_contexts_to_rolenames.get(
            context_implication.source_context_id, []):
      implied_role_names_list = implied_context_to_implied_roles.setdefault(
          context_implication.context_id, list())
      implied_role_names = lookup_role_implications(
          rolename, context_implication)
      all_implied_roles_set.update(implied_role_names)
      implied_role_names_list.extend(implied_role_names)
  # If some roles are required, query for them in bulk
  all_implied_roles_by_name = {}
  if implied_context_to_implied_roles and all_implied_roles_set:
    implied_roles = db.session.query(Role)\
        .filter(Role.name.in_(all_implied_roles_set))\
        .options(sqlalchemy.orm.undefer_group('Role_complete'))\
        .all()
    for implied_role in implied_roles:
      all_implied_roles_by_name[implied_role.name] = implied_role
  # Now aggregate permissions resulting from these roles
  for implied_context_id, implied_rolenames \
          in implied_context_to_implied_roles.items():
    if implied_context_id is None:
      continue
    for implied_rolename in implied_rolenames:
      implied_role = all_implied_roles_by_name[implied_rolename]
      collect_permissions(
          implied_role.permissions, implied_context_id, permissions)