How to fetch specific users OR admins with the ElementCriteriaModel?
You won't be able to do that using the ElementCriteriaModel or a single query (unless you use craft ()-&gt; db-&gt; createCommand() or \CDbCriteria to perform a conditional JOIN).

You will either have to 1) do post filtering or 2) get the ids for users in the groups you want and the ids for all admin users (which I would recommend). You can then merge both arrays and use the resulting array to get all users that match the containing ids.

You mentioned that you wanted to do it the clean way and doing a couple of queries using the public Element Query API is definitely the clean way to do it and the fact that you're doing a couple of queries to get the users you want should not feel "unclean" because that is happening in a lot of different places behind the scenes when you use the API instead of raw queries.

For example, when you add the $ criteria-&gt;groupId = array(1, 3); to a user query, Craft will hit the db once to get all ids for users in those groups and then hit it again as many times as necessary to do what it needs to do, like perform searches and such.

My point is, using the API means that you might not be able get everything in one go but your plugin won't break if Craft changes any internal APIs.