从Ajax调用mvc C#访问HttpContext当前会话

时间:2015-10-05 16:06:44

标签: ajax asp.net-mvc-4 session privileges httpcontext

我目前有一个自定义属性,它放在我的管理控制器和家庭控制器上。自定义属性将首先转到活动目录,以检查用户是否在特定AD中,从而为整个应用程序授予管理员权限。如果用户不在AD组中,则自定义属性将查找安全性表,以查看他们是否具有可以为其授予管理员权限,添加记录权限,删除记录权限和/或更新记录权限的安全记录。

我在执行属性期间设置了当前用户并将其添加到HttpContext.Current.Session。在整个页面加载中,我正在进行ajax调用以在页面的每个部分上加载数据,并且无法在ajax调用中访问安全性。我想通过他们的权限隐藏和显示不同的按钮(添加,删除,编辑和删除)。

我看过我可以使用属性

 [WebMethod(EnableSession = true)]

我的方法有效,但我认为这不是最佳做法,我知道这会慢慢降低性能。我还读到这更多用于Web API而不是MVC应用程序。在ajax调用期间,是否有更好的方法来访问HttpContext中的Session数据?

1 个答案:

答案 0 :(得分:0)

如果只是显示/隐藏逻辑,为什么不在Razor视图中执行此操作(您可以从那里访问Session),如下所示:

@{
    var user = (MyUser)Session["Current_User"];
    // MyUser can have IsInRole method for security checking
} 
<section class="view-body">
    @if (user.IsInRole("ServiceOrder_Create") || user.IsInRole("ServiceOrder_Assign"))
    {
        <input type="button" id="edit_btn" />
    }
    @if (user.IsInRole("ServiceOrder_Delete"))
    {
        <input type="button" id="delete_btn" />
    }
</section>

当然,我们必须在Web API方法中再次检查用户的权限。默认情况下,Web API是无状态的,这意味着我们无法直接访问会话,但有一个技巧可以帮助我们在此处启用会话Enable session in Web Api 2