@codenamecrud

Страница 833 из 1009
Екатерина
19.04.2018
13:43:25
ребят, спасибо за советы и мнения, очень полезно было, на самом деле))

Vasiliy
19.04.2018
13:50:48
вообще типа есть юзер и например подписчик(юзер который купил подписку) и надо обычному юзеру возвращать 5 новостей и 5 комментов к этой новости, а подписчику всё

Anton
19.04.2018
13:51:07
хм

Google
Vasiliy
19.04.2018
13:51:21
это не конкретный пример, но логика такая, подписчику доступно всё, а обычному - лимиты

Anton
19.04.2018
13:51:49
типо что бы эта штука сама решала кому сколько возвращать или что бы ты понимал какой пользователь у тебя?

Vasiliy
19.04.2018
13:53:18
решала

Anton
19.04.2018
13:53:36
но это же не правильно с точки зрения распределения логики

Vasiliy
19.04.2018
13:53:41
а как?

Anton
19.04.2018
13:53:51
да вот сам хз, надо подумать

но вопрос хороший

потому что мне самому сейчас надо сделать что-то такое

вообще, по хорошему, я бы вот так сделал

Vasiliy
19.04.2018
13:54:19
именно вот кейс чтобы лимитировать данные для обычного юзера

тут пока без пундита, но думаю его скоупы сюда бы зашли

Anton
19.04.2018
13:55:24
хм

ну собственно

Google
Anton
19.04.2018
13:55:38
я могу так сделать со своей штуковиной

Vasiliy
19.04.2018
13:57:04
пока чёт вроде закладывают логику на уровне сериалайзера, но что-то я уже спотыкаюсь

Anton
19.04.2018
13:59:28
какой штуковиной?)
https://gist.github.com/davydovanton/de13e221b8d12ff58be35a7b8a8dc84b

Vasiliy
19.04.2018
14:00:32
бле) меня их ActionPolicy привлёк именно похожестью на пундит) но ладно

Maksim
19.04.2018
14:00:46
@davydovanton огромное спасибо что затронул на подкасте вопрос депрессий - это не звук, и у многих такие проблемы.

Anton
19.04.2018
14:01:01
бле) меня их ActionPolicy привлёк именно похожестью на пундит) но ладно
а дальше вот так ебашишь class ReadOperation include AbilitiesImport[ability_checker: 'post.read'] def call(user, params) ability_checker.call(user, PostRepository.new) # ... end end

бле) меня их ActionPolicy привлёк именно похожестью на пундит) но ладно
но в целом такое, мб я бы сделал определение роли лучше

вот это было бы ахуенно

тогда ты бы смог прямо в оперейшене логику крутить

Maksim
19.04.2018
14:02:12
да всегда рад помочь, потому что я сам 2 года ебусь с этим и это такое
я 11-й месяц, пока что, правда, без фармацевтики, пытаюсь сам, и без врачей - но как-то так. :/

Anton
19.04.2018
14:02:30
помогает попросить у близких помощи попросить

меня 2 раза чуть за руку не водили на первый прием

и я 1 раз сам водил

Maksim
19.04.2018
14:03:04
сложно пойти к врачу, но лучше сходить
ходил - много печальных врачей, из раздела "главное бабло отсыпь".

но то, что скинул 9-10кг, были вопросы к здоровью, и я не могу подняться иногда на работу, даже если подожгут кровать-это факт. :D

Anton
19.04.2018
14:03:51
но в целом такое, мб я бы сделал определение роли лучше
вот типо такого abilities['post.role'].call(anonymous, post) # => :anonymous abilities['post.role'].call(regular, post) # => :base abilities['post.role'].call(payed, post) # => :payed

Google
MpaK
19.04.2018
14:04:22
так то сколько людей столько и мнений, мне нравится то что Инстамарт делают, потому что то именно продукт, а не постоянный аутсорс, в такой компании приятно работать

Vasiliy
19.04.2018
14:04:41
ну допустим роль есть, но мне вот это не очень нравится repo.all_with_limit(user) т.е. доп метод на моделе, который в свою очередь будет доп методы на связях вызывать чтобы лимиты везде были

Maksim
19.04.2018
14:04:47
хех..

Anton
19.04.2018
14:05:15
а дальше тупо делаешь, в оперейшене детектишь роль и в результате этой роли уже резолвишь что делать

Vasiliy
19.04.2018
14:05:48
но это же для отдельного поста, верно?

Anton
19.04.2018
14:06:00
ну, ты роль для юзера показывать можешь, туда что хочешь прокидывается

можешь просто юзера кинуть и все

не правильно написал, прости, вот так abilities['post.role'].call(user) # => :payed

Vasiliy
19.04.2018
14:06:33
abilities['post.role'].call(payed, post) - тут получается что проверяется пост оплачен или нет, верно?

Anton
19.04.2018
14:06:50
вот так надо abilities['post.role'].call(user) # => :payed

т.е. по сути

ты через ауф должен роль получить + узнать пермишен

Vasiliy
19.04.2018
14:07:18
а, и в оперейшене уже режутся, так?

Anton
19.04.2018
14:07:21
а что доставать под роль - это уже где-то в бизнес логике

а, и в оперейшене уже режутся, так?
ага, типо оперейшен сам решает что для роли делать

т.е. твоя цель задетектить может юзер читать и если да - какая роль, что бы достать под нее данные

Vasiliy
19.04.2018
14:07:58
чото всё равно сложно кажется как-то)

Google
Anton
19.04.2018
14:08:06
тогда твои полиси будут чистые и без зависимостей

потому что дергать что-то - токое

Vasiliy
19.04.2018
14:08:57
спасибо

Anton
19.04.2018
14:10:25
спасибо
ну типо такого получится

class ListOperation include AbilitiesImport[ability_checker: 'post.read', role_detector: 'user.role'] def call(params) user = repo.find(params[:user_id]) return Left(:permission_denied) unless ability_checker.call(user) case role_detector.call(user) when :regular post_repo.list_with_limit when :payed post_repo.list else Left(:error) end end end

тогда будет на изи тестироваться (мокаешь оба класса и все) + у тебя будет бизнес логика (что для каждой роли делать) чистой достаточно

и никакой магии, в том плане, что у тебя полиси вызывают базу и что-то сами решают

+ можешь накрутить роли и полиси под домен свои

ну, собственно мое мнение

и как бы я и делал

и навено надо сделать вес для ролей

лол

что бы админ "весил" больше анонима

хотя с другой стороны - а нужно ли это

Sergey
19.04.2018
14:25:45
эмм, а если в квери обжект передавать юзера, и в квери уже определять скоуп на основе пермишенов юзера не катит?

Anton
19.04.2018
14:25:58
ну, у тебя есть штука, что бы определить роль пользователя

есть штука, что бы данные достать

есть штука для того, что бы понять, разрешено что-то для юзера или нет

Google
Anton
19.04.2018
14:26:35
это разные логики

ты можешь в квери объект передать пользователя, его роль и параметры

а определить роль перед

Vasiliy
19.04.2018
14:29:26
так ну это вроде понятно, а если там связи резать надо

Anton
19.04.2018
14:29:57
а, я не дочитал, я типа такого имел ввиду
ну как бы да, при этом надо бы делать даже вот так post_repo.list_for_role(role) вместо кейса

Vasiliy
19.04.2018
14:30:07
ну т.е. лимитированные посты мы получили, но нам надо лимитировать количество комментов к примеру

Vasiliy
19.04.2018
14:33:57
ну у тебя есть post.limit(5) но, тебе надо дупустим лимит на комменты к нему и лимит например на лайкнувших и репостивших, по дефолту же оно загрузит 5 постов и все связи для них или предлагаешь делать что-то типа openstruct где руками собирать нужных объехт?

Anton
19.04.2018
14:35:09
так это релейшеном собирается

делаешь релейшен один, потом в него пихаешь релейшен для коментариев и все

ну типо это логика выгребания же по сути

Vasiliy
19.04.2018
14:36:30
ну получается что логику в релейшены писать?

Anton
19.04.2018
14:36:46
ну это логика получения данных

квери объекты

агрегаторы (если про ддд говорим)

репозитории

Vasiliy
19.04.2018
14:37:31
хмммм

а как потом это гавно сериализовать с АМС например?

Anton
19.04.2018
14:39:50
а хз, лол

ну, зависит от того, что нужно

Страница 833 из 1009