English 中文(简体)
Role/Permission based forms authorizing/authentication?
原标题:

While looking into forms authorizing/authentication, I found that it is possible to do role based authorizing by adding an array of roles to a FormsAuthenticationTicket. That way I can write

User.IsInRole(role from database)

But is there any way to do the same thing with permissions on a role like :

if (User.IsInRole(role from database)) {
    if (User.CanRead()) {
        //--- Let the user read
    }
    if (User.CanWrite()) {
        //--- Let the user write
    }
}

I have read a couple of articles and forum post s where permission is added to the array instead of the roles, resulting in using

User.IsInRole(permission from database)

However that s not the same thing. Hope someone can give some input on this matter, throw a link to an article or better yet, an code sample.

最佳回答

You re better off changing the way you think about a role. Use the term "permission" or "claim" if that helps. Then create all the roles you need and link a given user to all the necessary roles.

One user can belong to multiple roles. This way, the following simple code will work fine and you don t need to build your own unique way of how things work.

if(User.IsInRole(someRole) && User.IsInRole(someOtherRole))
{
  // do something
}

You can make some C# extension methods to make this more readable too:

if(User.IsInSomeRoleAndOtherRole())
{
   // do something
}

The extension methods can look something like the following. Create a new class with the following code, then include the class namespace in your code, and you can use the extension method as shown above.

using System.Security.Principal;

namespace MyCompany
{
  public static class MyExtensions
  {
    public static bool IsInSomeRoleAndOtherRole(this IPrincipal principal)
    {
      if (!principal.IsInRole("someRole"))
        return false;

      if (!principal.IsInRole("someOtherRole"))
        return false;

      return true; // the user meets the requirements
    }
  }
}
问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签