2015-10-05 52 views
0

我目前有一个自定义属性放在我的管理控制器和家庭控制器上。自定义属性将首先进入活动目录,以检查用户是否在特定的AD中,使其具有管理权限给整个应用程序。如果用户不在AD组中,那么定制属性将在安全表中查看它们是否具有可以赋予其管理权限,添加记录权限,删除记录权限和/或更新记录权限的安全记录。从Ajax调用mvc C访问HttpContext当前会话#

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

我读我可以使用属性

[WebMethod(EnableSession = true)] 

我的方法,它的工作原理,但我不认为这是最好的做法,我知道这会降低性能相当多。我也读过这个更多用于Web API而不是MVC应用程序。在Ajax调用过程中,有没有更好的方式来访问HttpContext中的会话数据?

回答

0

如果它只是显示/隐藏逻辑,为什么你不这样做,在剃刀的意见(你可以从那里访问会话),像下面:

@{ 
    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

+0

我们没有使用开箱即用的授权。我们正在使用自定义属性。 User.IsInRole不适用于我们的解决方案。 – Juan

+1

这只是一个例子,无论如何我编辑了我的答案,请再次检查,以便更清楚地了解 – phnkha

+1

呃。为什么即使打扰使用Web Api,如果你打算做一些启用会话之类的事情。 Web Api的重点在于创建一个真正的REST投诉API。否则,你总是可以在MVC中创建端点并做任何你喜欢的事情。 –