ASP.NET标识-使用具有JavaScript功能的角色

ASP.NET标识-使用具有JavaScript功能的角色,javascript,c#,jquery,asp.net-mvc,asp.net-identity,Javascript,C#,Jquery,Asp.net Mvc,Asp.net Identity,我有一个使用JQuery数据表的应用程序。我希望为每个用户显示这些表,但只允许特定角色的用户使用单击功能 所以,我可以用这个在控制器上设置授权 [Authorize(Roles = "Admin")] 这还不够,因为仍将有对该控制器和方法的调用,以及对那些不在“Admin”角色中的控制器和方法的重定向 假设我的javascript中有这样一个函数 //Click event on the table row $('#table1').on('click', 'tr', function (ev

我有一个使用JQuery数据表的应用程序。我希望为每个用户显示这些表,但只允许特定角色的用户使用单击功能

所以,我可以用这个在控制器上设置授权

[Authorize(Roles = "Admin")]
这还不够,因为仍将有对该控制器和方法的调用,以及对那些不在“Admin”角色中的控制器和方法的重定向

假设我的javascript中有这样一个函数

//Click event on the table row
$('#table1').on('click', 'tr', function (event) {
    //Post the data to the controller
    $.ajax({
        type: "POST",
        url: "/Controller/Action",
        data: {someData : someData},
        success: function () {
            //do something 
        }
    });
});
@if (User.IsInRole("Admin"))
{
    <input type="hidden" id="isAdmin" value="true">
}
我想围绕这个点击事件做一些总结

if (role == "Admin") { //click event in here }
现在,我知道角色在服务器端,而javascript在客户端。
我看到了一些关于使用razor语法将某些内容输出到隐藏列中,然后使用javascript获取该值的建议。像这样的

//Click event on the table row
$('#table1').on('click', 'tr', function (event) {
    //Post the data to the controller
    $.ajax({
        type: "POST",
        url: "/Controller/Action",
        data: {someData : someData},
        success: function () {
            //do something 
        }
    });
});
@if (User.IsInRole("Admin"))
{
    <input type="hidden" id="isAdmin" value="true">
}
@if(User.IsInRole(“Admin”))
{
}
但是,这并不真正安全,因为隐藏字段仍然可以访问。
我可以用什么合适的方式使用这些身份角色来处理我的javascript?

不需要传递模型就可以做到这一点

@if(Request.IsAuthenticated&&User.IsInRole(“管理员”))


如果是单页应用程序,你必须通过一个模型。如果黑客在javascript中将其角色更改为管理员,他们将看到单击按钮,但如果不是管理员,他们将无法对其执行任何操作。

一个相对简单的方法是将管理员javascript移动到单独的文件中,并且仅当用户处于管理员角色时才将其包括在内。例如:

@Scripts.Render("bundles/js/app")

if (User.IsInRole("Admin") {
  Scripts.Render("bundles/js/admin")
}
这样,它可以通过点亮特定于管理员的功能来增强普通用户的体验,从而逐步增强管理员的应用程序


显然,最重要的防线仍然是控制器或操作上的
[Authorize]
属性。没有任何Razor视图技巧或JavaScript恶作剧可以取代它。

这是我想到的一种方法。谢谢我想问一下这是否是一个好主意。对于不应该看到它的用户,您需要避免在页面上出现click事件,否则没有任何东西可以阻止他们操纵if语句。