asp.net mvc试图将我的应用程序锁定为只读和管理访问权限

时间:2013-01-02 10:51:11

标签: asp.net-mvc

我创建了一个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

我在这里缺少什么?

0 个答案:

没有答案