
Vlad
19.08.2017
11:00:24
Ну да. Если я праивльно понял. То надо просто проверять создать в модели кастомную валидацию (хотя может как-то и по другому), которая будет проверять blog_id параметр. Ну типа
def blog_validation
if Blog.find_by_id(blog_id).user_id != current_user
errors.add(:blog_id, "Shit happens, cheater!")
end
end
Ибо так то спокойно можно зайти в эту форму, и в options поставить другой ID и выбрать и отправить его)

Vitaliy
19.08.2017
11:15:47
☝️ все так

Google

Vlad
19.08.2017
11:16:39
Ну значит я не такой уж и тупой. А работу найти не могу. Хоть людям помогу)

Alex
19.08.2017
11:18:50
? спасибо, мои сомнения разбиты, надо валидировать

Fedor
19.08.2017
12:05:59
csrf позволяет защититься от отправки формы с левого сайта
но не от подмены запроса
от подмены запроса невозможно защититься никак вообще
я могу взять curl и отправить по нужному ардресу абсолютно все, что угодно
твоя задача уже отфильтровать то, что пришло на сервере
а там могут быть и sql инъекции, и попытки вызвать системные команды и подмены id шников...

Denis
19.08.2017
12:28:36
Чуваки помогайте!
………/site_ruby/2.4.0/rubygems/specification.rb:2288:in `raise_if_conflicts': Unable to activate dm-serializer-1.2.2, because json-2.1.0 conflicts with json (~> 1.6) (Gem::ConflictError)
json я снес давно и поставил заново 2.1.0
дак теперь и он не нравится что делать а?

Google

spartakusQ
19.08.2017
12:45:23

Denis
19.08.2017
12:45:51
что? ну я не знаю может я совсем ламер

spartakusQ
19.08.2017
12:46:14
гемфайл проверь

Denis
19.08.2017
12:46:57
#require 'watir'
source "https://rubygems.org"
gem 'cucumber', '2.4.0'
gem 'rspec-expectations', '3.6.0'
gem 'selenium-webdriver', '3.5.0'
gem 'nokogiri'
gem 'headless'
gem 'pp'
gem 'rubygems'
gem 'data_mapper'
gem 'dm-serializer';

Vlad
19.08.2017
13:08:15
gem dependency dm-serializer
Gem dm-serializer-1.2.2
dm-core (~> 1.2.0)
fastercsv (~> 1.5)
json (~> 1.6)
json_pure (~> 1.6)
multi_json (~> 1.0)
rake (~> 0.9, development)
rspec (~> 1.3, development)

Vitaliy
19.08.2017
13:09:15

Denis
19.08.2017
13:10:16
bundle update json
Could not find gem 'json'.

Vlad
19.08.2017
13:20:56
Гем хочет работать с json 1.6, который на рубячке 2.4 не заводится вообще
Попробуй в депенденсях поправить на 2.1.0
Правда потом надо их перезагрузить эти зависимости, кажется
И может прокатить костыль

Denis
19.08.2017
13:50:54
В где где Влад? депенденсях?
я нубик ? не пинать ?

Vlad
19.08.2017
13:51:35
Да я тоже нубоджун, поэтому не факт, что правильные советы даю)

Denis
19.08.2017
13:51:49
ну давай попробуем там поглядим? ?
короче что где править и как перегружать плиииз

Vlad
19.08.2017
13:52:16
Задача нетривиальная костылять гемы конечно, поэтому интересно, щас сам попробую

Denis
19.08.2017
13:52:36
спасибо
чета странно у меня на бубунту на серваке все завелось и все ок

Vlad
19.08.2017
13:53:21
А версия рубей какая на серваке?)

Google

Vlad
19.08.2017
14:08:46
Было решение мое такое - локально в геме править файл с зависимостями, в моем случае это ~/.rvm/gems/ruby-2.3.3/gems/dm-serializer-1.2.2, и изменить там строчку где указано ~> 1.6 на нужное. Потом кажется надо еще поменять там в настройках этого же гема версию гема (а может и не надо, проверять лень заново), чтобы при бандле он перезагрузился. А ну и в проекте в Gemfile указать например локальный путь к гему:
gem 'dm-serializer', :path => '/home/vlad/.rvm/gems/ruby-2.3.3/gems/dm-serializer-1.2.2'
В общем везде пошаманить чтобы этот гем запускался с гемом json более новой версии, которая дружит с новыми рубями. Кстати есть тикет у гема по этому поводу https://github.com/datamapper/dm-serializer/issues/48

Rolling
19.08.2017
15:21:21
Ахахахаха
Я так ящик пива выиграл пару лет назад
Короче акция была у пива Kozel, надо было в 00:00 зайти на сайт, там открывалась форма, которую если заполняешь и успеваешь в числе первых 10 отправить, то получаешь ящик пива.

Vlad
19.08.2017
15:22:40
:)


Ro
19.08.2017
16:36:34
Ну да. Если я праивльно понял. То надо просто проверять создать в модели кастомную валидацию (хотя может как-то и по другому), которая будет проверять blog_id параметр. Ну типа
def blog_validation
if Blog.find_by_id(blog_id).user_id != current_user
errors.add(:blog_id, "Shit happens, cheater!")
end
end
Этот способ верный. Еще один способ (как я бы сделал) - заюзать load_and_authorize_resource. Это из cancan gem'а. В общем, когда ты добавляешь эту штуку в свой REST контроллер, у тебя автоматически во всех методах грузится инстанс того, что тебе надо. Например:
def show(blog_id)
# тут уже можно обращаться к переменной @blog
end
Т.е. не надо Blog.find и т.д. делать.
Чтобы авторизовать ресурс, надо добавить (можно в базовом контроллере, например) метод current_ability, которой будет возвращать инстанс класса Ability - ну это уже самому надо глянуть как на примерах это работает. У этого класса должен быть метод authorize!, который и вызывается из cancan.
Также в этот метод передается экземпляр загруженной модели (`@blog`) в нашем случае. Так вот, в этом своем собственном Ability я бы сделал проверку - отвечает ли модель на policy, например так: @resource.respond_to?(:policy). Если да - то просто вызвать этот метод, а этот метод должен возвращать уже свою Policy - просто экземпляр класса, который решает кому давать доступ, а кому нет. Для blog'а это будет BlogPolicy, для коммента CommentPolicy и т.д. - эти policy будут просто делать head 403 если что-то не авторизовано.
Что это дает?
1. никаких загрузок (`Blog.find...`) в контроллере, в наших action'ах уже доступна переменная @blog, @comment и т.д.
2. никаких проверок в контроллере, action'ы будут вызываться ТОЛЬКО в том случае, если BlogPolicy сработал и не вернул head 403.
3. никакой нагрузки на модель (стандартная проблема в рельсах - разрастание модели). Только один метод, который создает экземпляр BlogPolicy, и вся логика содержится там
4. Вся логика по проверке сидит в одном понятном месте. Для блога это BlogPolicy, для коммента CommentPolicy и т.д.
5. В будущих контроллерах не надо париться с проверками и загрузками. Когда current_policy определена в ApplicationController, все контролеры автоматически получают эту функциональность - уменьшается количество ненужного кода.
В общем я этот подход попробовал - довольно удобно.
#ресурс #resource #policy #cancan #cancancan #load_and_authorize_resource
если кто сделает демо-репо по этой схеме - скиньте ссыль в чат


spartakusQ
19.08.2017
18:35:53
Немного странных картинок.

Konstantin
19.08.2017
18:50:28
Линуксы, чому у меня джемы в рбенв не из под рута не ставятся?
Говорят, прав нет, а я первый день в убунте

Ivan
19.08.2017
18:56:32
Так а что именно пишет то?

:﷼
19.08.2017
19:00:56

Konstantin
19.08.2017
19:01:32
Sudo gem install - команда не существует.
На попытку без судо - у вас нет права записи в папку
/home/username/.rbenv/...
Если выполнить sudo su

Google

Konstantin
19.08.2017
19:02:36
И попробовать из под рута - всё ок

spartakusQ
19.08.2017
19:02:48
так сделай права на папку
чего как маленький

Konstantin
19.08.2017
19:03:14
Надо посмотреть, спасибо
Права наследуются по вложенности?

Admin
ERROR: S client not available

spartakusQ
19.08.2017
19:03:52
да

Konstantin
19.08.2017
19:04:06
Ок, попробую
Из дома

spartakusQ
19.08.2017
19:04:22
sudo chown -R username /home/username/.rbenv/
username -твой пользователь под которым логинишься

Konstantin
19.08.2017
19:05:29
Спасибо!

Vladimir
19.08.2017
21:51:33
@vlad_laptev , да, можно и удалить

spartakusQ
19.08.2017
22:36:34
народ а как вы думаете, кто самый крутой рэп исполнитель?

Vlad
19.08.2017
22:39:20
я хоть и меломан, но такое слушал по дурости в эпоху диалапа)

Andrey
19.08.2017
22:39:35
Жорик конечно

Ro
19.08.2017
23:56:16

Dmitry
19.08.2017
23:58:55
rbenv через root(sudo) установлен, на девелоперской системе, не надо так.

Konstantin
20.08.2017
00:28:17
:/

Ro
20.08.2017
00:28:55
sudo тока для apt-get я юзаю, если так вспомнить

Google

Ro
20.08.2017
00:29:04
больше вроде ничо не надо, ну может сервис включить-выключить
ща постримим - 1 раз нах, если получится: https://www.twitch.tv/ro31337 - если чо - чирканите мне там в чате. Будем делать фичу для либретакси делать

Aura
20.08.2017
04:33:04
Ром я один там)

Vitaly
20.08.2017
04:33:14
Я вижу.)

Aura
20.08.2017
04:33:15
2 )

Vitaly
20.08.2017
04:33:16
И слышу

evgeny
20.08.2017
05:14:08
я был 3-м)

Ro
20.08.2017
05:14:29
ок)
закоммитили ~100 строк кода
закрыли issue
тоже застримьте чонить

Vitaly
20.08.2017
05:26:07
Да, тоже думаю, может стрим устроить как-нибудь.)
Он сохранился?

Ro
20.08.2017
05:30:50
а хз

MR
20.08.2017
05:34:22
не сохранился