0
我有一個帶有自定義成員資格和角色提供程序的MVC應用程序。我檢查用戶是否是這樣一個角色:存儲庫不會從HttpContext.Current.User.IsInRole注入
public static bool CustomersVisible
{
get
{
return
HttpContext.Current.User != null &&
HttpContext.Current.User.Identity.IsAuthenticated &&
HttpContext.Current.User.IsInRole("Admin");
}
}
自定義角色提供程序是這樣的:
public class DRRoleProvider : RoleProvider
{
private IUserProfileRepository _userProfileRepository;
private IRoleRepository _roleRepository;
public DRRoleProvider() {}
public DRRoleProvider(IUserProfileRepository userProfileRepository, IRoleRepository roleRepository)
{
_userProfileRepository = userProfileRepository;
_roleRepository = roleRepository;
}
. . .
public override bool IsUserInRole(string username, string roleName)
{
var user = _userProfileRepository.GetByUserName(username);
var role = _roleRepository.GetByName(roleName);
if (user != null)
{
return user.Roles != null && user.Roles.Contains(role);
}
return false;
}
編輯補充:這是我的NinjectControllerFactory:
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null
? null
: (IController) ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<ICustomerRepository>().To<CustomerRepository>();
ninjectKernel.Bind<IUserProfileRepository>().To<UserProfileRepository>();
ninjectKernel.Bind<IRoleRepository>().To<RoleRepository>();
ninjectKernel.Bind<ISessionFactory>().ToProvider<SessionFactoryBuilder>().InSingletonScope();
ninjectKernel.Bind<ISession>().ToMethod(CreateSession).InSingletonScope();
ninjectKernel.Inject(Membership.Provider);
ninjectKernel.Inject(Roles.Provider);
}
private ISession CreateSession(IContext context)
{
var session = context.Kernel.Get<ISessionFactory>().OpenSession();
return session;
}
}
當調用IsUserInRole方法時,我在_userProfileRepository上得到一個空引用異常。我怎樣才能確保從HttpContext.Current.User.IsInRole調用存儲庫注入?從我自己的代碼調用時它工作正常。
我仍然使用屬性注入得到了同樣的問題。我認爲它可能與請求生命週期有關 - 當我創建一個新的客戶和用戶時,它保存了一切正常,但是當應用程序在創建後重定向到主頁並且嘗試檢查角色時,那是什麼時候存儲庫爲空。 – JeffCren
問題很可能在您的Ninject配置中。你能用它更新你的問題嗎?你在哪裏告訴Ninject注入角色提供者屬性?在應用程序啓動? –
我添加了我的NinjectControllerFactory中的代碼,但我也注意到,使用屬性注入時,存儲庫始終爲空,而不僅僅是在發佈和重定向之後。 – JeffCren