anchor.diff:      {atomic, Result} = mnesia:transaction(T),
       Result.
   
  -%% has side-effects. Will fill the ETS table 'repos'
   -spec priv_populate_repos([{binary(), binary()}]) -> [true].
   priv_populate_repos(RepoList) ->
       T = fun() ->
  
positive.code: %%--------------------------------------------------------------------
  init({RepoList, ACL}) ->
      %% Note: Don't create tables anymore, once Mnesia persistence is configured
      {atomic, ok} = mnesia:create_table(repo, [{ram_copies, [node() | nodes()]}
                                               ,{type, set}
                                               ,{attributes, record_info(fields, repo)}]),
      mnesia:wait_for_tables([repo], 10000),
      priv_populate_repos(RepoList),
      lager:info("Repository list initialized."),
  
      {atomic, ok} = mnesia:create_table(acl, [{ram_copies, [node() | nodes()]}
                                              ,{type, set}
                                              ,{attributes, record_info(fields, acl)}]),
      mnesia:wait_for_tables([acl], 10000),
      priv_populate_acl(ACL),
      lager:info("Access control list initialized."),
  
  
negative.code: %%--------------------------------------------------------------------
  start_link(Args) ->
      gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []).
  
  %% Note: start/1 does not link the gen_server to its parent. It's only
  %% used in the test suite. The supervisors should always call
  %% start_link/1
  start(Args) ->
      gen_server:start({local, ?SERVER}, ?MODULE, Args, []).
  
  stop() ->
      gen_server:cast({local, ?SERVER}, stop).
  
  
  -spec get_user_permissions(binary()) -> user_not_found | {ok, [binary()]}.
  get_user_permissions(User) when is_binary(User) ->
  