You could assign permissions on the ThingShape level, and then have all things or templates with a certain permission scheme implement the ThingShape with those permissions granted. This is generally not advised because it can become very hard to manage and result in security issues for your application. The best practice way of granting permissions is to do it on the ThingTemplate level.
Please let me know if you have further questions on this.
Leo Dias Besides , what Tori said ,
Run Time, Design Time, and Visibility permissions on a ThingTemplate will only apply to that ThingTemplate and any child ThingTemplates
Run Time Instance, Design Time Instance, and Visibility Instance permissions on a ThingTemplate will be applied to all Things that use this ThingTemplate
Run Time, Design Time, and Visibility permissions on a Thing will override any instance permissions set on the ThingTemplate level
*Design Time Instance permissions are currently not functioning as expected.
Previous answers aren't 100% accurate about setting permissions by ProjectName, on 7.2 you have new snippets to Add permissions to a things that belong to a ProjectName.
Look for: SetEntityPermissions Snippet
Also won't be hard to build a service which queries entities that belong to a project and set it in batch.