【发布时间】: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;
}
}
}
在单击登录用户的编辑操作时,我收到“无法投射类型的对象”错误 [见图]
我如何才能回退该查询以便能够使用 if 来检查我的权限。
【问题讨论】:
标签: asp.net-mvc linq session casting authorization