我创建了一个customRoleProvider,它查看数据库以查看分配给角色的用户。用户可以有两个角色,管理员或用户。我希望我的应用程序允许管理员用户创建,编辑和删除项目。
但是我希望其他用户能够看到管理员用户正在创建和编辑的项目。
这就是为什么我创建了CustomRoleProvider所以我可以将控制器锁定到两个用户,但是创建和编辑方法我只能锁定到管理员角色。
这似乎适用于当前分配给用户的管理员角色,(我已在数据库中为用户分配管理员角色,应用程序允许这些用户创建,编辑)但每当我将用户分配给不同的角色(用户)时应用程序提供了如下错误:
已经有一个与此命令关联的打开DataReader,必须先关闭它。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:已经有一个与此命令关联的打开的DataReader,必须先关闭它。
我已经阅读了这个错误,似乎我必须在我的web.config文件中启用MARS(MultipleActiveResultSets = True;)。我已经这样做但是没有用。
我的customRoleProvider方法的代码是:
public override string[] GetRolesForUser(string username)
{
using (EFDbContext db = new EFDbContext())
{
User user = db.Users.FirstOrDefault(u => u.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase) || u.Email.Equals(username, StringComparison.CurrentCultureIgnoreCase));
if (user != null)
{
var roles = from ur in user.UserRoles
from r in db.Roles
where user.role.RoleID == r.RoleID
select r.Name;
if (roles != null)
return roles.ToArray();
else
return new string[] { }; ;
}
else
{
return new string[] { }; ;
}
}
}
似乎在
上失败了其中user.role.RoleID == r.RoleID
我在这里缺少什么?