欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET MVC 中实现基于角色的权限控制的处理方法

程序员文章站 2024-03-04 13:01:05
[authorize]public actionresult index() 标记的方式,可以实现所标记的action必须是认证用户才能访问; 通过使用 [autho...

[authorize]
public actionresult index()

标记的方式,可以实现所标记的action必须是认证用户才能访问;

通过使用

[authorize(users="username")]

的方式,可以实现所标记的action必须是某个具体的用户才能访问,以上两种方式使用起来非常方便,在needdinner示例程序中已有具休的实现过程,

但是,我们在实际的应用中所使用的大都是基于角色(roles)的认证方式,needdinner中却未给出,本文给出具体实现(基于asp.net forms验证)过程:

step 1
在完成username和password认证后,向客户端写入认证cookie

代码

复制代码 代码如下:

        formsauthenticationticket authticket = new formsauthenticationticket(
            1,
            username,
            datetime.now,
            datetime.now.addminutes(20),
            false,
            "admin"//写入用户角色
            );

        string encryptedticket = formsauthentication.encrypt(authticket);

        system.web.httpcookie authcookie = new system.web.httpcookie(formsauthentication.formscookiename, encryptedticket);
        system.web.httpcontext.current.response.cookies.add(authcookie);

step 2
在global.asax.cs文件中加入以下代码,用于在用户登陆网站时读取cookie

代码

复制代码 代码如下:

protected void application_authenticaterequest(object sender, eventargs e)
    {
        httpcookie authcookie = context.request.cookies[formsauthentication.formscookiename];
        if (authcookie == null || authcookie.value == "")
        {
            return;
        }
        formsauthenticationticket authticket = null;
        try
        {
            authticket = formsauthentication.decrypt(authcookie.value);
        }
        catch
        {
            return;
        }
        string[] roles = authticket.userdata.split(new char[] { ';' });
         if (context.user != null)
        {
            context.user = new system.security.principal.genericprincipal(context.user.identity, roles);
        }
    }

step 3

这样以来,就可以使用实现以下效果

复制代码 代码如下:

  [authorize(roles="admin")]
    public actionresult index(int ? page)