Filter entries in the CP based on custom permission
After some digging I came up with some answers myself. For future reference, here they are:

Is the event triggered by the CP: 

if(craft()-&gt;request-&gt;isCpRequest()){}

Check the logged in user's permissions:

$userPermissions = craft()-&gt;userPermissions-&gt;getPermissionsByUserId($user-&gt;id);


or use a permission directly:

if($user-&gt;can('permissionName')){}


Add an extra param to the criteria that filters to correct region:

$query = $event-&gt;params['query'];
$params = array( ':regio' =&gt; '["us","eu"]' );
$query-&gt;andWhere('content.field_regio LIKE :regio', $params);


Send the changed ElementCriterioModel (or query) to wherever it needs to go:

After setting that query, the function just executes and filters the list.


If you use something like this, make sure you filter out the correct section to check on (because the onBuildElementsQuery is fired on almost everything in the CP). But that's where I stopped my search as eventually, we will not be needing it in this project.