Best relational database structure for this data
The way you've modelled it is fine.  Your model ensures that the business rules are enforced by the database.

There are a couple of things you could do as an alternative.  One would be to eliminate the surrogate key on Roles_Applications.  As an intersection table, you could use the two foreign keys together as a composite primary key.  If you did this, that would propagate Role and Application down to your Applications_Permissions_Roles table.  This would have the advantage of giving you more of a "one stop shop" for your application permission data (i.e. fewer joins) without compromising your normalization in any way.

Another way you could go would be to simplify slightly and define a default permission for each application.  You could call it whatever you like, such as "default access" or "basic access" or "user" or whatever makes sense to you.  This would allow you to flatten your model and essentially drop the Roles_Applications table and join Applications_Permissions_Roles straight to Roles.  This would change the nature of the query that you would use to ask "which roles can access which applications?" but your business rules would still be enforced by the schema.