2015-06-30 2 views
3

У меня есть приложение, использующее JQuery DataTables. Я хочу, чтобы эти таблицы отображались для каждого пользователя, но разрешали только функции кликов для пользователей в определенной роли.Идентификатор ASP.NET - использование ролей с функциональностью JavaScript

Таким образом, я могу установить разрешение на контроллерах с этим ...

[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 (role == "Admin") { //click event in here } 

Теперь, Я знаю, что роли находятся на стороне сервера, а javascript - на стороне клиента.
Я видел некоторые предложения по использованию синтаксиса бритвы, чтобы вывести что-то в скрытый столбец, а затем захватить это значение с помощью javascript. Что-то вроде этого ...

@if (User.IsInRole("Admin")) 
{ 
    <input type="hidden" id="isAdmin" value="true"> 
} 

Но это не очень безопасно, потому что скрытые поля по-прежнему доступны. Каким образом я могу использовать эти роли идентичности для работы с моим javascript?

+0

Вам нужно избегать появления события щелчка на странице для пользователей, которые не должны его видеть, иначе ничего не мешает им манипулировать оператором if. –

ответ

3

Один относительно простой подход заключается в том, чтобы переместить ваш JavaScript-администратор в отдельный файл и включить его только в том случае, если пользователь находится в роли администратора. Например .:

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

if (User.IsInRole("Admin") { 
    Scripts.Render("bundles/js/admin") 
} 

Таким образом, он может постепенно улучшить приложение для администраторов, освещая администратор специфических особенностей, чтобы увеличить опыт обычных пользователей.

Очевидно, что самая важная линия защиты по-прежнему является атрибутом [Authorize] на вашем контроллере или действии. Никакие трюки для просмотра Razor или JavaScript-shenanigans не могут заменить это.

+0

Это один из способов, о котором я думал. Благодарю. Я собирался спросить, была ли это хорошая мысль. – madvora

+0

спасибо, его работа мне. – adnan

1

Вы можете сделать это без прохождения модель,

@If (Request.IsAuthenticated & & User.IsInRole («администратор»))

Если это одно приложение страницу вы должны пройти модель. Если хакер меняет свою роль на админ в javascript, они будут видеть кнопки с кнопками, но не смогут ничего с ним сделать, если они будут администратором.

Смежные вопросы