anchor.diff:              throw({error, not_found})
       end.
   
  --spec delete_role(domain(), uid(), rolelocation()) -> {ok, updated} | erlang:throw({error, not_found}).
  +-spec delete_role(domain(), uid(), {role(), meeting_id()}) -> {ok, updated} | erlang:throw({error, not_found}).
   delete_role(Domain, Id, {Role, Location}) ->
       {ok, User} = get(Domain, Id),
       Roles = case lists:member({Role, Location}, User#uce_user.roles) of
  
positive.code: -behaviour(gen_server).
  
  -include("uce.hrl").
  
  -type rolelocation() :: {list(), list()}.
  
  %
  % Public api
  
negative.code:             true
      end.
  
  -spec add_role(domain(), uid(), {role(), meeting_id()}) -> {ok, updated} | erlang:throw({error, not_found}).
  add_role(Domain, Uid, {Role, Location}) ->
      % Just ensure the role and location exists
      case uce_meeting:exists(Domain, Location) of
  