Devise rejestracja i zarządzanie sub user'ami

Cześć i wesołych świąt.

Korzystam z autoryzacji w devise i stworzyłem dwa modele w którym jeden to Konto/Super user, natomiast drugi model to jak by to powiedzieć pracownicy z dostępem do konta super user.

I nasuwają się trzy pytania:

  1. Jak zakładając subkonto przekazać mu ID zalogowanego użytkownika? W modelu? current_user?
    Czy może jakoś nadpisać kontrolery stworzone przez devise
  2. Czy podczas logowania domyślnie posiadacz SUB konta będzie mógł się zalogować z głównego formularza logowania [domyślam się że po połączeniu tabel has_many/belongs_to] devise znajdzie sposób utworzenia sesji
  3. Czy po zalogowaniu SUB użytkownika można w sessji przetrzymać ID rodzica?

Nie liczę na gotowe rozwiązania, ale może znacie jakiś tutorial, nawet ENG który mnie step by step pokieruje :wink:

A masz jakieś argumenty dlaczego tak, a nie inaczej - np. dodać cancan’a?

CanCan z tego co wiem tworzy jedynie role użytkowników. A ja chcę stworzyć wielu użytkowników jednego konta.

Myślę, że najlepiej było by stworzyć kolumnę w tablicy użytkowników odwołującą się sama do siebie.
i zrobić tak:

  1. podczas rejestracji kolumna parent_id była by = id użytkownika
  2. Podczas dodawania pod użytkowników konta parent_id wskazywał by na właściciela konta i właśnie tą stałą bym pakował dane do innych tablic używając je jako klucza.

Dlatego chciałbym zapytać. Jak podczas zapisywania - rejestrowania użytkownika jednocześnie wypełnić pole user_id tą samą wartością co unikalny id użytkownika? Baza pewnie sama tworzy ten numer, ale może są jakieś czary w Rubym aby to zrobić prościej xD

CanCanCan nie tworzy żadnych ról dla userów, polecam dokumentacje. W skrócie CanCanCan sluzy do autoryzacji usera do resources ( zasobow ) i jesli chcesz osiagnac to co napisales to cancancan jest wystarczajacy.

Mozesz tez spojrzec na: Pundit sluzy do tego samego.

@slawotu nie znam Devise’a, wiem tylko, że służy do autentykacji użytkowników, ale powiedz mi proszę co w twoim przypadku chcesz osiągnąć rozszerzając (dziedzicząc) po rodzicu?

@lsiwinski Chciałem aby klient mógł założyć konto, nowy klient => nowe konto. Po zalogowaniu aby mógł dodać innych pracowników do swojego konta - udzielić im dostęp. Super by było jak klient i jego pracownicy mogliby się logować z użyciem tego samego formularza logowania.

Nie wiem jak zamierzasz zrobić autoryzacje, czy za pomocą gem (cancancan lub pundit), czy zrobić własne rozwiązanie. Ale jak ja bym zamodelował użytkowników, coś na wzór drzewka (https://www.leighhalliday.com/tree-structures-in-your-rails-models) :

  1. Stworzyć model user, z dodatkową kolumną parent_id
  2. Rejestracja głównego konta, będzie miała kolumnę “parent_id” pustą.
  3. Następnie zalogowany użytkownik głównego konta, tworząc sub konta (każde subkonto to kolejny rekord w tabeli user), będzie wypełniał kolumnę “parent_id” swoim idkiem.

W ten sposób mamy rozwiązaną autentykację, gdyż każdy użytkownik może się logować za pomocą formularza oraz masz ustawione asocjacje pomiędzy głównym kontem a sub kontami. Pytanie dalej, jak chcesz zrobić autoryzację?