Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/56: Рейтинг темы: голосов - 56, средняя оценка - 4.98
19 / 19 / 6
Регистрация: 09.12.2010
Сообщений: 140
1

Содержимое представления в зависимости от роли пользователя

27.04.2016, 19:57. Показов 10976. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте, друзья!
В приложении реализована авторизация на основе Identity. Имеется 3 вида ролей пользователей: user, manager и admin.
У роли admin, естественно, полные права, в т.ч. редактирование записей и доступ к разделу меню "Администрирование".
У manager имеется право редактирования записей, но нет доступа к разделу "Администрирование" (этот раздел не должен отображаться).
Пользователи с ролью user имеют право только просматривать записи, т.е. у них нет доступа и не отображается раздел меню "Администрирование", а так же нет доступа к редактированию записей и не отображаются ссылки перехода на страницы редактирования.
Доступ ограничивается с помощью атрибута Authorize к методам действия.
Подскажите, как наиболее удачно организовать разграничения прав доступа к элементам представления, именно чтобы не отображались не нужные пункты меню и html элементы.
Есть идеи: для каждой роли создавать отдельные представления; одно представление для каждой роли и уже в представлении организовать логику отображения элементов в зависимости от роли.
А может есть какие-то другие, более интересные, методы?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2016, 19:57
Ответы с готовыми решениями:

Видимость кнопки в зависимости от роли пользователя
Если у меня такой код, как сделать чтобы показывала кнопка у одного пользователя using System;...

Скрыть пункт меню в зависимости от роли пользователя
Доброго времени суток. Не селен в php, но нужна помощь. есть код на html <nav...

Открытие определенных форм в зависимости от роли пользователя
Добрый день, в Access 2010 нужно открыть - форму для логистов, если введены данные роли...

Изменение представления в зависимости от авторизации пользователя
Добрый вечер) С тем, как привинтить авторизацию пользователей, вроде разобралась. Встал вопрос,...

6
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
29.04.2016, 00:33 2
sashocheck, в представлении пишите
C#
1
2
3
@if(User.IsInRole("admin"){
    <div>Код html только для flvbyf</div>
}
2
19 / 19 / 6
Регистрация: 09.12.2010
Сообщений: 140
29.04.2016, 08:57  [ТС] 3
Eugene22, а как логику перенести из представления в контроллер, но чтобы не создавать представление для каждой роли?
0
91 / 91 / 44
Регистрация: 20.04.2008
Сообщений: 331
29.04.2016, 12:36 4
Лучше мне кажется создать отдельные представления
1
1496 / 1044 / 146
Регистрация: 01.10.2009
Сообщений: 3,510
Записей в блоге: 1
29.04.2016, 18:28 5
Цитата Сообщение от off Посмотреть сообщение
Лучше мне кажется создать отдельные представления
А зачем отдельные? Вам же уже подсказали
C#
1
2
3
@if(User.IsInRole("admin"){
    <div>Код html только для flvbyf</div>
}
И в этом представлении формируете представление под каждую роль
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.04.2016, 19:09 6
Лучший ответ Сообщение было отмечено sashocheck как решение

Решение

Роли , строго говоря , вообще могут быть какие угодно , и как правило создаются в админке , т.е привязку нужно делать не к ролям , а к полномочиям , которые уже обьединяются той или иной ролью/группой.
Да чего далеко ходить , возьмите вон за пример систему безопасности windows.
Сначала нужно выделить сущности к которым применимы атрибуты полномочий , выделить общие атрибуты доступа , например: чтение, запись , редактирование и т.п , и вынести их в базисную security логику приложения , обеспечить возможность их администрирования. Ну и потом уже просто работа в плане сравнения полномочий у роли текущего юзера с атрибутами безопасности той ил иной сущности. Все это конечно потребует реализации определенной security инфраструктуры.

Просто для наглядности, что такое , например , отображение элемента в приведенном контексте ? - это по сути проверка для роли значения атрибута на чтение , притом если элемент отображает результат вызова бизнес.метода , то атрибуты безопасности можно сделать сквозными - т.е проверка на чтение будет уже не на уровне интерфейса , а на уровне бизнес.логики (или еще ниже , на уровне БД и средствами БД) - что обеспечит нам более универсальное решение . не привязанное к какому либо UI движку. , ну а элемент интерфейса уже в зависимости от результата вызова "засекьюренного" метода может и не отображаться - если например получит AccessReadException/SecurityException и т.п , т.е решение в лоб , на уровне вьюхи аля IsUser("admin") , это самый такой низкобюджетный одноразовый вариант ).

Т.е это я к тому , что если смотреть на систему ограничений шире , а не только в рамках UI , то на вопрос как лучше в вашем случае можно сказать что и так и эдак плохо , а потому без разницы , делайте как это Вам удобнее.
1
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
29.04.2016, 21:05 7
sashocheck, для контроллера применяется атрибут Authorize с указанием допустимых ролей, например, [Authorize(Roles="admin")] и все
0
29.04.2016, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 21:05
Помогаю со студенческими работами здесь

DI-контейнер в роли зависимости
Наблюдал два подхода при разрешении зависимостей (контейнер любой). public SomeService(ILogger...

роли пользователя
Здравствуйте, =) у меня такая проблема: есть БД, в которой содержатся страницы сайта в виде...

Редирект на нужную страницу в зависимости от роли
Создал вручную две роли, admin, user. Если вошел admin ТО перейти хочу на его страницу, иначе на...

Использование мастер страницы в зависимости от роли
Доброго времени суток, форумчане. Имеются три типа пользователей (три роли):...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru