我目前有一个自定义属性,它放在我的管理控制器和家庭控制器上。自定义属性将首先转到活动目录,以检查用户是否在特定AD中,从而为整个应用程序授予管理员权限。如果用户不在AD组中,则自定义属性将查找安全性表,以查看他们是否具有可以为其授予管理员权限,添加记录权限,删除记录权限和/或更新记录权限的安全记录。
我在执行属性期间设置了当前用户并将其添加到HttpContext.Current.Session。在整个页面加载中,我正在进行ajax调用以在页面的每个部分上加载数据,并且无法在ajax调用中访问安全性。我想通过他们的权限隐藏和显示不同的按钮(添加,删除,编辑和删除)。
我看过我可以使用属性
[WebMethod(EnableSession = true)]
我的方法有效,但我认为这不是最佳做法,我知道这会慢慢降低性能。我还读到这更多用于Web API而不是MVC应用程序。在ajax调用期间,是否有更好的方法来访问HttpContext中的Session数据?
答案 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