void checkPermission(Permission p) {

  foreach (caller's domain) {

    if (caller's domain does not have permission)
       throw new AccessControlException(p);

    if (caller is marked as privileged) 
       return;
  }

  // Access Granted
  return;
}