创建要与自定义角色提供程序一起使用的自定义角色主体,如何将IIdentity作为参数传递?

时间:2013-08-24 01:38:44

标签: asp.net-mvc-4 authorization roleprovider iprincipal

我的MVC4应用程序的自定义角色提供程序运行良好,因为它创建角色,检查角色存在,检查IsUserInRole但我的[Authorize(Roles =“Admin”)]仍然使用默认的System.Web .Security.RolePrincipal.IsInRole(String role)方法

我试图创建一个自定义的RolePrincipal来覆盖IsInRole方法,但是我在找到构造函数的正确参数时遇到问题,并且我不确定如何在web.config中设置它。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration.Provider;
using MetaLearning.Data;
using System.Web.Security;

namespace Project.Principal
{
  public class MyPrincipal : System.Web.Security.RolePrincipal
  {
    private MyContext dbcontext = new MyContext(System.Configuration.ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString);
    private Repository<MyUser> userRepository;
    private Repository<Role> roleRepository;        

    public MyPrincipal()
    {
        this.userRepository = new Repository<MyUser>(dbcontext);
        this.roleRepository = new Repository<Role>(dbcontext);
    }

    public override bool IsInRole(string role)
    {
        Role roleCheck = roleRepository.Get(r => r.Name == role).FirstOrDefault();
        MyUser user = userRepository.Get(u => u.Username == HttpContext.Current.User.Identity.Name).FirstOrDefault();
        user.RoleID = roleCheck.RoleID;
        userRepository.Update(user);
        userRepository.SaveChanges();
        return true;
    }
}

}

我检查了RolePrincipal文档http://msdn.microsoft.com/en-us/library/system.web.security.roleprincipal.aspx,可以看到最基本的构造函数RolePrincipal(IIdentity)采用了IIdentity的参数。如何以及在何处可以检索到这一点,因为我不确定它是什么? webconfig中是否还需要进行其他更改?

0 个答案:

没有答案