212 похожих чатов

Приветствую. Подскажите плиз, верно рассуждаю или нет. Есть различные ресурсы

на сайте. Надо накрутить над ними систему авторизации, с различными группамми, пермишенами, вайтлистами, блеклистами. Прикидываю что надо этого отдельный модуль авторизации, в котором вся эта логика выдачи прав на чтение,запись будет инкапсулирована. Но одно из правил - это является ли пользователь создателем ресурса. Получается информация о том, кто создатель должна находиться в модуле авторизации а не в модулях ресурсов? И при создании какого либо ресурса надо добавлять запись о создателе в модуль авторизации?

20 ответов

28 просмотров

зачем пользователю знать, создатель он ресурса или нет?

Павел-Г. Автор вопроса
Michel Angelo
зачем пользователю знать, создатель он ресурса или...

Не понял вопроса. Есть например правило: Пользователь может редактировать ресурс, если он создатель, или у него этот ресурс разрешен в вайтлисте или он в группах модератор/администратор. Я это хочу вынести в отдельный модуль.

Павел Г.
Не понял вопроса. Есть например правило: Пользова...

это я понял, я наводящий вопрос задал - зачем пользователю знать, создатель он ресурса или нет? может достаточно знать кому принадлежит ресурс, и к его обращению проверять ты ли мой создатель?

Павел-Г. Автор вопроса
Michel Angelo
это я понял, я наводящий вопрос задал - зачем поль...

Я все равно не понимаю ) Пользователь и не знает. Мой вопрос вот о чем: Обычно я делал так, есть new resource(data, user_id). Т.е. именно в ресурсе хранилось кто его создал. Но по большей части ресурсу это информация вообще не нужна в его логике. Однако это информация нужна в логике авторизации. Соответсвенно мне кажется что должно быть два класса для ресурса в двух модулях: new AuthResource(resource_id, user_id) и MainResource(data).

Павел-Г. Автор вопроса

@fes0r начало

тут есть два варианта: - модуль авторизации предоставляет точку расширения которая позволяет зарегистрировать проверку "является ли чел автором ресурса" в модуле ресурсов - поскольку информация "кто создал ресурс" не меняется то можно безопасно добавить это в некий ACL предоставляемый модулем авторизации. В этом случае у тебя вопрос кто слушает ивент "ресурс создан" и кто добавляет запись в ACL. скорее всего ты не хочешь на каждый чих менять модуль авторизации

Павел-Г. Автор вопроса
Sergey P
тут есть два варианта: - модуль авторизации пред...

Я так понимаю, первый вариант это что-то про engine rule

Павел-Г. Автор вопроса
Sergey P
тут есть два варианта: - модуль авторизации пред...

Ну а второй вариант, это как раз примерно о чем я изначально писал, только не привязываться к конкретным русурсам в модуле авторизации. Более асбтрактно

мне кажется, что не нужно никаких отдельных модулей авторизации. Есть правила, которые относятся к модулям, они там и лежат. Дальше есть какая-то инфраструктура(фреймворк), которая собирает все правила и при необходимости вызывает проверку правил, связанных с действием. Таким образом правила зависящие от стейта модуля остаются внутри

Павел-Г. Автор вопроса
knopkod4v
мне кажется, что не нужно никаких отдельных модуле...

Куда отнести группы, вайт/блек листы, пермишены которые должны харниться заполняться, если это не отдельный модуль?

Павел Г.
Куда отнести группы, вайт/блек листы, пермишены ко...

каждый модуль хранит группы, вайт и блек листы?

Павел-Г. Автор вопроса
knopkod4v
каждый модуль хранит группы, вайт и блек листы?

А так же роли пользователей? Как то всё раскидано выходит

Павел Г.
А так же роли пользователей? Как то всё раскидано ...

есть такое, но наверное если у тебя role based, то можно и отдельно, даже на шлюзе каком-нить есть ещё вариант подумать над декомпозицией, задаться вопросом "почему правила из других модулей нужны?"

Павел-Г. Автор вопроса

Я больше смотрю к тому, а почему вообще какие то пермишены вообще должны влиять на основной функионал? Например я вообще взял готовый бандл работы с заказами. Я же не смогу на него накрутить пермишены свои, роли и т.д. Только сверху. А какая разница бандл это или мой код?

Павел Г.
Я больше смотрю к тому, а почему вообще какие то п...

что ты подразумеваешь под "почему должны влиять на основной функционал"? Просто отрезать проверкой роли? Можно и так, но бизнес любит наворачивать каких-то сложных штук и придётся тягать их из соседних объектов. Но плюс в том, что скорее всего тут не нужно immediate consistency, значит можно спокойно читать без локов. ХЗ почему не можешь накрутить с бандлами, это уже специфика какая-то

Павел-Г. Автор вопроса
knopkod4v
что ты подразумеваешь под "почему должны влиять на...

Под влиять на основной функицонал имею ввиду следующий кейс: Мы написали некий модуль, без каких либо особенностей авторизации. Он работает, инкапсулирован, есть апи. Прилетает задача с авторизацией, пермишеннами и прочим. И мы начинаем расширять именно текущий модуль, его код. Банально добавляем создателя, хотя для логики этого модуля user_id не нужен, вообще никак, по крайней мере сейчас. Или в его Edit экшен добавляем какие то условия.

Павел Г.
Под влиять на основной функицонал имею ввиду следу...

Так он ведь нужен. Надо ведь проверить, что текущий юзер равен тому, что записан в создателе

Павел-Г. Автор вопроса
knopkod4v
Так он ведь нужен. Надо ведь проверить, что текущи...

Зачем это именно самому модулю, это не его функционал.

Павел Г.
Зачем это именно самому модулю, это не его функцио...

Думаю тут надо отделить вопрос физического разделения и разделения кода по модулям. С точки зрения физ. разделения - важно будет производительность смотреть и если ок, то можно физически по хттп всяким или ещё как куда-то ходить. Т.к. опять же immediate consistency не надо. С точки зрения разделения кода по модулям Тут будет 2 идентификатора - user_id и resource_id, тогда нужно отнести эту связку либо к юзеру, либо к ресурсу. Скорее всего юзер у нас более стабильная штука, поэтому user_id лучше хранить на стороне ресурса

Похожие вопросы

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Карта сайта