【问题标题】:Authentication & Authorization Role issue身份验证和授权角色问题
【发布时间】:2016-01-16 17:32:19
【问题描述】:

我在管理区域(部分)中有一个控制器名称 UserController。我可以在其中将角色管理员 (A) 分配给用户 (U) 或将用户 (U) 分配给管理员 (A)。

当我更改任何用户的角色时,它也在数据库中成功更新,但是当我从应用程序登录时,我已经更改了角色的用户,因此用户包含其旧角色。我已经将断点也放入了变量“角色” ' 正在返回以前的角色。我很惊讶“角色”变量如何返回其旧角色。

public override string[] GetRolesForUser(string username)
        {
        string[] role = { obj.GetAll().Where(x => x.EmailAddress ==    username).FirstOrDefault().Role };
        return role;
    }

此代码中的用户控制器 AssignRole 操作我正在更新角色

 public ActionResult AssignRole(int id, string role)
    {
        try
        {
        BOL.tbl_Login user = (BOL.tbl_Login)obj.login.GetById(id);
        if (role == "A")
        {
            user.Role = "U";
        }
        else if (role == "U")
        {
            user.Role = "A";
        }
        else
        {
            user.Role = "U";
        }
        obj.login.Update(user);
        TempData["Msg"] = "Operation Successfully!";

        }
        catch (Exception ex)
        {
            TempData["Msg"] = "Error " + ex.Message;
        }
        return RedirectToAction("_Index");
    }

我也在用

   [Authorize(Roles = "A")]

我认为 Entity Framework 没有返回最新数据。

这是数据访问层代码

public override void Update(T data)
    {
        obj.Entry(data).State = EntityState.Modified;
        obj.Configuration.ValidateOnSaveEnabled = false;
        Save();

        obj.Configuration.ValidateOnSaveEnabled = true;
    }

【问题讨论】:

    标签: asp.net-mvc entity-framework-6


    【解决方案1】:

    您的问题是角色正在保存以前的值和当前值。 AsNoTracking 函数不保存以前的值,它只显示当前值。将我的代码放在你获得角色的地方或你的方法'gettroles'之上,这样你的问题就会得到解决

        public override IEnumerable<T> GetAll()
        {
    
            return obj.Set<T>().AsNoTracking().ToList();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2014-05-11
      相关资源
      最近更新 更多