Miguel
Does that user profile has *ALLOBJ special authority or not? Does the user belong to any group profile or not? (Use DSPUSRPRF to check this.)
IBM i has a fixed flow of checking for access authority to an object as shown below:

You can see from the flow above that private authority is checked BEFORE AUTL. If there is a private authority entry for that user profile that explicitly allows or denies the access to the object, then the flow do not proceed onward to AUTL. I guess this may be the case for you.
You should also be aware that there are 2 levels of access authority: at the object level and at the object's content (data) level as shown below (from DSPOBJAUT command):


You said you can delete the file, that is the object level authority which is separate from data authority. So, you need to check both levels. But assigning the object authority value of *USE serves read-only purpose for both object and data levels.
You said you need the user to be able to "invoke read-only commands". There is no mechanism for this purpose as it is redundant. Assigning proper object and data authority can serve the same purpose. Otherwise , you have to assign private authority for that user profile to all command objects in your system which is tedious.
Can you post the DSPOBJAUT screen of, say, 2 or 3 objects for me to see here so I can provide more tangible analysis ? (Keep pressing F11 to see both OBJECT level and DATA level as shown above) You need to also let me know the user name at issue so I can check if there is any private authority of that user already assigned to the objects or not. If so, it explains why your AUTL does not work.
Normally, try to use just private authority first to serve your purpose because using AUTL has negative performance impact when accessing a lot of data at the same time.