|
WebApi
|
|||
---|---|---|---|
#18+
Разбираюсь с WebApi. Вроде все ясно. Но у меня своя специфика. Опишу ситуацию. Авторизуясь, юзер привязывается к заказчику. В обычном MVC я все данные о заказчике храню в сессии, и все запросы идут в разрезе этого заказчика. Как это реализовать в WebApi? Посылая запрос "/api/Order/23456" Я конечно могу получить все данные по заказчику с id =23456 Но как тогда вынуть конкретный заказ? Можно сделать еще контроллер, но что то мне не кажется это верным. В идеале бы, вместе с токеном как то заказчика обозначить? Подскажите знающие люди. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 09:05 |
|
WebApi
|
|||
---|---|---|---|
#18+
а в чем принципиальное отличие то? авторизируй дальше.. если у тебя пользователь привязан к заказчику то на уровне бд наверное есть связка с заказчиком или их много и надо как то выбирать конкртеного? юзер (многие) -> заказчик (1) такая связка? п.с. особо не вижу смысла хранить заказчика в сесии если у тебя как я выше написал есть связка на уровне бд ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 09:54 |
|
WebApi
|
|||
---|---|---|---|
#18+
handmadeFromRu, Связка много ко много. И полагаю это не принципиально. В конкретный момент, 1 юзер = 1 заказчик. Не совсем понимаю, как использовать связь в БД? Предположим связь 1-1 Тогда на сервере получаю данные по этому юзеру, и в этом разрезе отдаю данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 10:22 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdorВ обычном MVC я все данные о заказчике храню в сессии, и все запросы идут в разрезе этого заказчика. И в обычном MVC сессия — отвратительный способ привязать пользователя к контексту. Лучший способ, затолкать ID заказчика в тикет авторизации (например, Claim), а данные самого заказчика, если они часто используются для логики обработки запроса, затолкать в кеш. Это работает и для WebApi. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 10:24 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdor, Если в рамках одной авторизации пользователь может работать с разными контекстами (заказчиками), тогда текущий контекст можно передавать либо параметром к каждому запросу, либо в хедерах, либо куки. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 10:26 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdor, ваще эт много меняет. у вас 1 клиент может быть пользователем разных заказчиков ну ок тогда как написал хвост дописывайте это в куку или в токен и все. п.с. а в какой момент вы понимает что клиент у вас относиться к конкретному заказчику? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 10:39 |
|
WebApi
|
|||
---|---|---|---|
#18+
handmadeFromRuasdor, п.с. а в какой момент вы понимает что клиент у вас относиться к конкретному заказчику? Некоторые юзеры имеют несколько заказчиков. Сразу после входа, выбирают с кем будут работать, далее все в разрезе выбранного. Ну ясно могут в процессе поменять, тогда в разрезе вновь выбранного. hVostt Спасибо. Понял куда копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 10:55 |
|
WebApi
|
|||
---|---|---|---|
#18+
hVostt...текущий контекст можно передавать либо параметром к каждому запросу... Вот тут опять в тупике( А как параметр передать? Погуглил... что то мимо( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 12:46 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdorВот тут опять в тупике( А как параметр передать? Погуглил... что то мимо( Погугли ASP.NET MVC add custom claim ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 13:16 |
|
WebApi
|
|||
---|---|---|---|
#18+
hVostt, Наверное я где то туплю, но вот как я это понимаю. Нет проблем, добавили в клэйм свойств, сохранили. Но это же все в куках хранится. Т.е. у клиента. Как это мне поможет? Мне то надо знать на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 14:24 |
|
WebApi
|
|||
---|---|---|---|
#18+
Кажется дошло. Отсылая токен, мы на сервере, можем получить клэйм. Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 14:36 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdorКажется дошло. Отсылая токен, мы на сервере, можем получить клэйм. Верно? При авторизации пользователя генерируется тикет, который хранит некоторую информацию: имя пользователя, роли, клеймы. При каждом запросе на сервер тикет разворачивается контекст безопасности пользователя, откуда всегда можно получить эту информацию. Откуда угодно из кода. Поэтому это самый верный путь, запихать свой идентификатор заказчика в виде Claim при создании тикета пользователя во время авторизации ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 14:47 |
|
WebApi
|
|||
---|---|---|---|
#18+
hVostt, Все понятно. Сделал Claim (пока строго 1 заказчик) А вот как из обычного контроллера, добраться до него. Вижу как получает все в GrantResourceOwnerCredentials Но как инфу от туда в контроллер пропихнуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 09:29 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdor, Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 09:59 |
|
WebApi
|
|||
---|---|---|---|
#18+
hVostt, Огромное спасибо!) А я вокруг до около. Таких конструкций нагромоздил...))))) СУПЕР! И в просто MVC так же можно. Значит могу похерить сессии! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 10:37 |
|
WebApi
|
|||
---|---|---|---|
#18+
С клеймом разобрался. Спасибо еще раз) С 1 заказчиком все ясно. Вот какая мысль если их несколько. У меня есть таблица UserInCust В которой прописаны все связи. Т.е. все заказчики, конкретного юзера. Есть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком. И вот какая мысль. Если я буду в момент смены заказчика, менять клейм CustId. И сохранять. И потом уже везде будет новый клейм. Это правильно, или опять не то? Логически, алгоритмически меня это вполне устраивает. Даже хорошо. Основной заказчик будет тот, который был последним после выхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 15:24 |
|
WebApi
|
|||
---|---|---|---|
#18+
asdorЕсть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком. Если в рамках одной авторизации несколько разных заказчиков, то на выбор: куки, передаваемый параметр в каждом запросе, или в URL. asdorЕсли я буду в момент смены заказчика, менять клейм CustId. И сохранять. Можно перевыпускать тикет да, типа делать переавторизацию с новыми Claims. Это хорошее решение, если работа в рамках одного заказчика долговременно, пользователю не надо очень быстро переключаться между ними постоянно. asdorИ потом уже везде будет новый клейм. Это правильно, или опять не то? Логически, алгоритмически меня это вполне устраивает. Даже хорошо. Основной заказчик будет тот, который был последним после выхода. Да, нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 19:46 |
|
WebApi
|
|||
---|---|---|---|
#18+
hVostt, так разбираюсь с WepApi и такой вопрос. Есть слой сервисов, который возвращает ViewModel. В интернете не нашел примеров где ApiController-ы работают с ViewModel, везде напрямую возвращают сущности DbContext-а На сколько правильно возвращать ViewModel ведь возвращаем json? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 09:43 |
|
WebApi
|
|||
---|---|---|---|
#18+
Sliva, если ваши модели настолько простые что представляют сущностями бд то возвращайте их. имхо разделение на модели дело вкуса. вы пишете что вы возвращает из сервисов вьюмодель. а я вот считаю что сервисы работаю с моделями предметной области(даж сущностями бд), а потом уже идет преобразование во вью модель. а можно просто херачить напрямую сущности бд. Все зависит от задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 11:10 |
|
WebApi
|
|||
---|---|---|---|
#18+
handmadeFromRuесли ваши модели настолько простые что представляют сущностями бд то возвращайте их. +1 если Модель правильная, нормализованная, то нет проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 11:16 |
|
WebApi
|
|||
---|---|---|---|
#18+
handmadeFromRuSliva, если ваши модели настолько простые что представляют сущностями бд то возвращайте их. имхо разделение на модели дело вкуса. вы пишете что вы возвращает из сервисов вьюмодель. а я вот считаю что сервисы работаю с моделями предметной области(даж сущностями бд), а потом уже идет преобразование во вью модель. а можно просто херачить напрямую сущности бд. Все зависит от задачи. Вьюмодели простые. Сервисный слой получает вьюмодель, производит какую то логику, маппит в сущность бд и отдает эту сущность репе. handmadeFromRu а можно просто херачить напрямую сущности бд. Все зависит от задачи. задача вернуть набор данных из бд. Напрямую из контроллера лесть в репу как-то не айс. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:28 |
|
WebApi
|
|||
---|---|---|---|
#18+
SlivaНапрямую из контроллера лесть в репу как-то не айс.нормально. У вас не бизнес логики на АппСервере. У вас просто API для отдачи наружу сущностей. Всё. Т.е. это REST сервис как в любом ЯП. Той же Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 13:41 |
|
|
start [/forum/topic.php?fid=18&fpage=21&tid=1355247]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 466ms |
0 / 0 |