【问题标题】:Casting back query results stored in session for Custom Authorization为自定义授权回滚存储在会话中的查询结果
【发布时间】:2017-04-14 09:50:04
【问题描述】:

我有下表 Permissions Table

登录时,我会获取该登录用户的 ProductEdit、ProductView、ProductDelete 的值,并将它们存储在会话中,以供以后对项目中的某些操作进行自定义授权。这是通过以下代码实现的(注意 var permissionJoin)

 if (usr != null)
        {
            Session["OperatorId"] = usr.OperatorId.ToString();
            Session["Username"] = usr.Username.ToString();
            Session["GroupId"] = usr.GroupId.ToString();

            var permissionsJoin = from up in db.UserPermissions
                                  join op in db.Operators
                                  on up.GroupId equals usr.GroupId
                                  select new UserPermissionData
                                  { UserGroupId = up.GroupId, P_Edit = up.ProductEdit, P_Create = up.ProductCreate, P_Delete = up.ProductDelete };

            Session["ProductPermission"] = permissionsJoin.ToList<UserPermissionData>();

            return RedirectToAction("LoggedIn");
        }

我正在使用一个命名类 [UserPermissionData - 它具有我需要的四个属性] 来存储这些值。结果很好地存储在会话中。 现在进入我的授权类,我需要提取这些值并检查 - 用户是否具有特定权限。我有以下代码

public class AuthorizeProductEdit : AuthorizeAttribute 
{      

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

        //lets get the session values of the current user's permissions               
        var userP = (UserPermissionData)HttpContext.Current.Session["ProductPermission"];
        var editProduct = userP.P_Edit;           

        if (editProduct.ToString() == "Y")
        {
            return true;
        }
        else
        {
            return false;
        }

    }
}

在单击登录用户的编辑操作时,我收到“无法投射类型的对象”错误 [见图]

Error Image

我如何才能回退该查询以便能够使用 if 来检查我的权限。

【问题讨论】:

    标签: asp.net-mvc linq session casting authorization


    【解决方案1】:

    您在 Session 中存储的是 List&lt;UserPermissionData&gt;,因此您必须将会话值转换为 List&lt;UserPermissionData&gt;

    var userP = HttpContext.Current.Session["ProductPermission"] as List<UserPermissionData>;
    
    if (userP == null) return false;
    
    return userP.Any(x => x.P_Edit.ToString() == "Y");
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2012-11-29
      • 2015-06-19
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      相关资源
      最近更新 更多