I see. The thing is that there's no virtual method to override in the GetMulti-call chain so you can't inspect filter to use.
So it's a bit complicated. Nevertheless, a small change to the DQE of SqlServer (or the database you are using) is an option. That means you need to download the source code and find the SqlServerDQE (if the case is SqlServer). As there's just 1 select query construction method (CreateSelectDQ), you can simply check the filter there and throws an exception if you want to.
If you don't want to alter the sourcecode, you can derive a class from the DynamicQueryEngine and override the selectquery construction method. The DAO classes set the DQE to use in the constructor. You could create a derived class for the DAO classes, set the DQE in THAT one's constructor (using a template of course) and then you can let the code instantiate instances of the new DAO classes in the collection classes and entity classes by overriding CreateDAOInstance() in which you create your own DAO variant.
Now, IMHO, this is not something you should check in code. You don't check every code convention in code and throwing exceptions. Otherwise you should check whether they are not deleting unwanted rows, or whether they are not fetching sensitive data, or whether they are setting the correct field values. In my opinion this is something you must check via Tests classes, or by passing an QA process. It's a balance between business rules conventions and Tests.
For Adapter is easier, because you only grant access for DBSpecific project to those programmers working on Fetching and Saving routines in BL. Then the rest of the programmers only use the Manager Classes (aka Business layer) delivered by DAL programmers. This way you have more control on Tests over those BL methods.
After that recommendation, the conclusion is that you can do what you asked for but you have to use above workaround. Hope helpful.