Authorization for presentation / page and authorization for a particular object are indeed two separate concepts. The best approach is to use the Authorize attribute in conjunction with the ASP.NET role system to grant or deny access to this page. Once you confirm that the user has access to the page, you can check whether he has permission that he is requesting for the object for which he is requesting it. I use this approach in my application and it works great. At first, using the Authorize filter, it significantly improves performance, since actually checking permissions on objects is much more difficult.
In addition, I use the home rule system to actually establish and determine if the user has access to the object. For example, on my system, administrators have full access to each object. (This is the rule.) The user who creates the objects has full access to the object (also specified by the rule). In addition, the user manager has full access to all the things that his employees have access to (again, the specified rule). My application then evaluates the object to see if any of the rules apply - starting with the most complex rule, and then moving to more complex rules. If any rule is positive, I stop evaluating the rule and exit the function.
source share