Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttskyANA, я понял уже, что вы зашли чисто поржать )) я говорил о конкретной задаче в начале топика, а? откройте 1-ую страницу, первое сообщение в теме и перечитайте. ну пожалуйста...Читал и отвечал даже на него. И конкретный пример привёл. И Вы вроде даже согласились, что в предложенном мной примере базовый контроллер имеет смысл. Но при этом добавили какие-то не понятные мне рассуждения про подсовывания чего-то куда-то. Вы мне можете обяснить, что этим хотели сказать в контексте предложеного мной кейса, или продолжите дальше флеймить с МСУ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 14:35 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
ПарамонЗачем привязывать роли к конкретным категориям? Роли не привязаны к конкретным категориям, с чего ты взял? ПарамонВ таком случае, добавляю поле в таблицу продуктов, и отмечаю как продукты для менеджера. Зачем что-то добавлять в таблицу продуктов и отмечать? Продукты могут быть не только для роли, продукты могут быть, например, для пользователей, чьи покупки > 100 руб. Что, будешь добавлять поле в таблицу продуктов? ПарамонОстальное делается в экшене Index, зачем там фильтры или базовый контроллер. Экшен тут вообще идет лесом, ты чего. Всего 100 продуктов. Все они доступны админу, а манагеру - только 50. Причем тут вообще экшен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 14:38 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttМСУhVostt, давай я задам тебе конкретный пример, а ты ответишь, как нужно решать его. 1. В приложении 2 роли, админ и менеджер 2. Справочник продуктов 3. Нужно дать доступ для справочника продуктов (Index) только для админа и менеджера 4. Админу разрешается всё 5. Менеджеру разрешается просматривать только продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня. Это элементарнейшая безопасность, детский сад просто. Набрал попкорна. 1. На экшен справочника [Authorize(Roles = "admin,manager")] 2. Во вью рендерить кнопки изменения при User.IsInRole("admin") 3. На экшены изменения [Authorize(Roles = "admin")] 4. Что менеджеру можно просмотривать продукты с категориями и датой, это решается в IProductService.GetProducts(), контроллеру должно быть фиолетово, что сервис отдаст. Что отдаст, то и покажет, сервису виднее что отдавать и по какой логике. Если скажешь что фильтровать по юзерам данные должен контроллер, тогда я тебе сразу скажу, архитектура -- УГ. 5. КАКОЕ это всё имеет отношение к вопросу БАЗОВОГО контроллера?????? Не торопи коней - идём дальше. Теперь нам нужно показывать все продукты менеджеру (Index), но доступные для редактирования (продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня) подсвечивать. Более того, в карточке продукта (Index/{id}) нам нужно запрещать просмотр, если категория не 1-3 и дата отгрузки <> вчера / сегодня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 14:45 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ, не исключено написание своих фильтров типа Authorize Это не нужно, т.к. речь не о Authorize, а о построении UI в разрезе полномочий. hVosttглавное, что этому не место в контроллере. А у кого этому место в контроллере? Этим должен заниматься отдельный класс и только он. Базовый контроллер - проводник к этому классу. hVosttконтроллер тем и замечателен, что там содержится минимум кода. в основном вызовы нужных Services и аспекты. еще скажи логику кеширования ты реализуешь в базовом контроллере, чем уже окончательно добьёшь мой мозг. У контроллере нет реализации, ты долго будешь тупить? hVosttя прошу кейс, где реализация кастомного базового контроллера будет действительно лучше аспектов и других возможностей фреймворка, давая ощутимые преимущества в архитектуре приложения. Я тебе уже достаточно привел примеров, ты просто до них еще не дорос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 14:48 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУПарамонЗачем привязывать роли к конкретным категориям? Роли не привязаны к конкретным категориям, с чего ты взял? МСУ Менеджеру разрешается просматривать только продукты с категориями 1, 2, 3 МСУЭкшен тут вообще идет лесом, ты чего. Всего 100 продуктов. Все они доступны админу, а манагеру - только 50. Причем тут вообще экшен? Это примерно то, что имел в виду. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Типа того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:13 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУ, МСУНе торопи коней - идём дальше. Теперь нам нужно показывать все продукты менеджеру (Index), но доступные для редактирования (продукты с категориями 1, 2, 3, с датой отгрузки = вчера или сегодня) подсвечивать. Более того, в карточке продукта (Index/{id}) нам нужно запрещать просмотр, если категория не 1-3 и дата отгрузки <> вчера / сегодня. Если речь идёт о доступе на уровне данных, а не только действий, бизнес-логика знает о ролях и элементах доступа. Элементы доступа для кейса: "products/index", "products/edit". Входят в роль "manager". IProductManagerService.GetList() возвращает для каждой записи также элементы доступа к ним для роли пользователя . Контроллер во вью передаёт модель с маркером индикации, в зависимости от элемента доступа, вью подсвечивает записи с соответствующим маркером и дает ссылку на страницу редактирования товара. IProductManagetService.GetItem() возвращает тоже самое только в одном экземпляре по Id. действие Index/{id} контроллера вызывает вью, информирующую пользователя о том, что доступ запрещен, если нет нужного элемента доступа . контроллер не должен реализовывать логику доступа к данным ни в каком виде. все, что ему требуется, это информация от сервиса, что можно, а что нельзя делать с полученной информацией. сократить расходы на кодинг можно, создав свой фильтр AccessAction(AccessItem = "product/edit"), действующий на событие Executed и перехватывающий вывод Result, если модель не обладает нужным AccessItem. тогда действие контроллера вообще лишается необходимости каких-либо проверок. получает данные и вызывает вью, как будто все все можно. опят таки, здесь ни в каком месте не нужен базовый контроллер. все решается нужным кастомным фильтром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:28 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttДайте убедительный довод зачем может понадобиться определять свой базовый контроллер? Что то я вообще не догоняю об чем речь, так можно переопределять базовый контроллер или нет? там для всяких фентифлюшек быстрого доступа к чему то, типа как генерации контракта на работу, ленивого кеширования чего то общего и тд. Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет? Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:35 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
ПарамонЭто примерно то, что имел в виду. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Типа того. Так не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать 14146874 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:43 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttЕсли речь идёт о доступе на уровне данных, а не только действий, бизнес-логика знает о ролях и элементах доступа. Элементы доступа для кейса: "products/index", "products/edit". Входят в роль "manager". Идет речь о любых уровнях - и данных и действий. "Бизнес-логика" - что за логика и где она должна размещаться? hVosttIProductManagerService.GetList() возвращает для каждой записи также элементы доступа к ним для роли пользователя . Контроллер во вью передаёт модель с маркером индикации, в зависимости от элемента доступа, вью подсвечивает записи с соответствующим маркером и дает ссылку на страницу редактирования товара. Логика выставления этого маркера должна быть в контроллере? Ты перечишь сам себе, сначала в DI, потом в фильтре, потом в глобальном синглтоне. А теперь - в контроллере? Молодец, чё. hVosttIProductManagetService.GetItem() возвращает тоже самое только в одном экземпляре по Id. действие Index/{id} контроллера вызывает вью, информирующую пользователя о том, что доступ запрещен, если нет нужного элемента доступа . А причем тут "доступ запрещен" и "просто нет элемента"? hVosttконтроллер не должен реализовывать логику доступа к данным ни в каком виде. все, что ему требуется, это информация от сервиса, что можно, а что нельзя делать с полученной информацией. Ничего не понимаю, то должен, то не должен. Ты определись уже, кто что должен. hVosttопят таки, здесь ни в каком месте не нужен базовый контроллер. все решается нужным кастомным фильтром. Десятый раз повторяю, где хранится логика: ...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7). ? В фильтре? А как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:52 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
Где-то в степиhVosttДайте убедительный довод зачем может понадобиться определять свой базовый контроллер? Что то я вообще не догоняю об чем речь, так можно переопределять базовый контроллер или нет? там для всяких фентифлюшек быстрого доступа к чему то, типа как генерации контракта на работу, ленивого кеширования чего то общего и тд. Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет? Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ??? Он уже сам запутался в показаниях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:53 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУТак не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать Условия для всех вариантов, описываюся в сервисном слое, не вижу проблемы. (это для примера) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 15:56 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУТак не делают - это раз (упаришься все роли перечислять для всех вариантов). Во-вторых, как будешь вот такие задачи решать Условия для всех вариантов, описываюся в сервисном слое, не вижу проблемы. (это для примера) Условия для всех вариантов описываются в отдельной песочнице (Security), а в сервисном слове уже используется эта информация. А базовый контроллер - отличное место для размещения экземпляра этой Security. ...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7). Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:00 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУА как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.? Не говори что тянешь все 100 продуктов, чтобы показать 50 из них менеджеру по условию во вью ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:01 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУ, в бизнес-логике решать. это не задача контроллера. какие-то действия еще можно разрешать в зависимости от роли. но не в случае с данными. все что должен реализовывать контроллер, это получать данные от M, передавать их на V, получать данные от V и передавать их M. в трансфере решаются проблемы биндинга и валидации, давать доступ к данным или не давать решает М, информируя об этом контроллер, он уже рендерит нужную вью. как это можно вынести в абстракцию я уже сказал, делается нужный фильтр-перехватчик и вешается на действие или на контроллер в целом. никакой базовый контроллер в этой схеме секьюрити нафиг не впился. если уже как было сказано, если база расширяется чисто для удобства доступа к сервисам, то ради бога. никакую архитектурную проблему/задачу это не решает и остается только на совести программиста. мой вопрос относится только к тому, когда это действительно нужно. прокидывать ссылки на сервисы — можно, но не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:02 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
Парамон, более того, бывают случаи, когда безопасность на уровне коллекции элементов невозможно описать для IQueryable<T>, т.к. запрос не может транслироваться или будет не оптимально / трудозатратно. Поэтому обычно делают IQueryable<T> + HasProductView. Ну понял, о чем, думаю. Это hVostt'у нужно всё по 100 раз пережевывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:04 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУ new[] { 1, 2, 3 }.Contains(product.CategoryId) Хардкод категорий улыбнул ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:04 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУА как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.? Не говори что тянешь все 100 продуктов, чтобы показать 50 из них менеджеру по условию во вью ) С работой IQueryable не знаком? Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:05 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
ПарамонМСУ new[] { 1, 2, 3 }.Contains(product.CategoryId) Хардкод категорий улыбнул ) Не принципиально, мы обсуждаем концепцию. Надо - выноси в енумы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:06 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, я заторчал от этого коммента :) Конечно речь не идет там расположить весь механизм какой нибудь пиздятины типа вставки удаления модификации данных и отслеживания разрешений. Но быстрый доступ к объекту который отвечает за это матерное слово - почему нет? конечно можно, ради бога, но нужно ли? решает это какую-то задачу так, что по-другому лучше не сделаешь? пока не вижу достойных примером на эту роль. Другой вопрос стоит ли создавать такой объект, или просто въебенить через фильтры или еще как - альтернативно хранению его в переопределенном бк., так это к теме топика отношение не имеет, так же как мой жидкий стул, к погоде на ямайке... ??? вы лучше поделитесь своей травой )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:06 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttМСУ, в бизнес-логике решать. это не задача контроллера. Ты почему ведешь себя как баран у новых ворот? Тебе уже все говорят, что логики в контроллере нет. Ты не понимаешь этого? hVosttкакие-то действия еще можно разрешать в зависимости от роли. но не в случае с данными. Такое ощущение, что я разговариваю со стеной, ты ни в какую не хочешь понимать, что тебе пишут. Ты в вакууме? hVosttкак это можно вынести в абстракцию я уже сказал, делается нужный фильтр-перехватчик и вешается на действие или на контроллер в целом. никакой базовый контроллер в этой схеме секьюрити нафиг не впился. Я тебе 100 раз повторил - этот вариант не устроит, т.к. UI отстраивается в разрезе полномочий пользователя. 101 раз повторить? hVosttмой вопрос относится только к тому, когда это действительно нужно. прокидывать ссылки на сервисы — можно, но не нужно. Значит таки уже можно? Великолепно. А почему не нужно, поведаешь нам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:09 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУОн уже сам запутался в показаниях. говори только за себя, плз. не уймешь своё чсв, да? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:11 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttМСУОн уже сам запутался в показаниях. говори только за себя, плз. не уймешь своё чсв, да? )) Тебе 100 раз повторишь одно и тоже, и только со 101 ты начинаешь понимать, что тебе пишут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:13 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУДесятый раз повторяю, где хранится логика: ...HasUserProductView = роль админ || (роль менежер $$ статус == 3) || ((роль вьювер && дата = сегодня) || роль вьювер && категория = 7). ? В фильтре? А как же вью, если для конкретного условия во вью мне нужно добавить / скрыть элемент, подсветить и т.д.? в бизнес-логике. читать умеешь? или то комменты по диагонале читаешь, увидел слово, вырвал из контекста и достебался с умным видом. очки на нос не лезут? поправь быстрей и прочитай вот это: логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. логика доступа к данным хранится в бизнес-логике. может лучше картинку? секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити хранит и управляет взаимосвязью ролей, пользователей и элеметнов доступа. секьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:16 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
hVosttв бизнес-логике. читать умеешь? или то комменты по диагонале читаешь, увидел слово, вырвал из контекста и достебался с умным видом. очки на нос не лезут? поправь быстрей и прочитай вот это: Логика хранится в логике? Масло масляное. Слушай, ты не только хреновый программист, ты еще и русский язык не знаешь. Для тех, кто засел в танке - "в бизнес-логике" - это что такое? Может ты во View хранишь свою бизнес логику. Может в контроллере. Может в репозитории. Опять трудности с пониманием прямых понятных вопросов? hVosttсекьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится. Где у меня секьюрити что-то решает, покажи пальцем? Ты инопланетянен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:20 |
|
||
|
[MVC] Базовый контроллер
|
|||
|---|---|---|---|
|
#18+
МСУhVosttсекьюрити не решает что и кому показывать, разрешать или не разрешать. а если у тебя решает, то мне искренне тебя жаль. серьезно. это уже болезнь в последней стадии, и я не уверен что это лечится. Где у меня секьюрити что-то решает, покажи пальцем? Ты инопланетянен? У меня секьюрити отвечает на вопрос, может ли пользователь что-то сделать в рамках своих ролей и бизнес-требований. Всё. А решать может кто угодно - view, controller, dataservice, repository и т.д. Ты код каким местом читаешь, признавайся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:23 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38216099&tid=1358582]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 387ms |

| 0 / 0 |
