Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Architektura wielodostępna Rails, ustalanie zakresu dostępu do wielu najemców

Pomimo znalezienia wielu przykładów wielodostępności w aplikacjach Rails, kiedy po raz pierwszy zacząłem to robić, nie mogłem znaleźć takiego, który sprawiałby, że czułem się całkowicie komfortowo. Ale w końcu mam rozwiązanie, z którego jestem zadowolony.

Zacząłem od railscastu „wielodostępność z zakresami”

http://railscasts.com/episodes/388-multitenancy-with-scopes

następnie przyjrzeliśmy się możliwości pracy wielu najemcom z subdomenami Devise, korzystając z tego przewodnika:

https ://github.com/plataformatec/devise/wiki/How-To:--Izoluj-użytkowników-do-logowania-do-jednej-subdomeny

Ale nie wziąłem tego za dobrą monetę; Zagłębiłem się, aby naprawdę zrozumieć, jak działa Devise.

Kiedy już to wszystko miałem na swoim miejscu, byłem gotowy na klejnot dla wielu najemców:

https://github.com/wireframe/multitenant

Ale nie poprzestałem na tym. klejnot multitenant wymaga, aby powiedzieć Multitenant.with_tenant za każdym razem, gdy chcesz, aby rzeczy miały odpowiedni zakres, więc stworzyłem TenantController, który wygląda tak:

  around_filter :scope_current_tenant

  def scope_current_tenant
    begin
      Firm.current = Firm.find_by_subdomain!(request.subdomain)
    rescue
      raise ActionController::RoutingError.new('Not Found')
    end

    Multitenant.with_tenant Firm.current do
      yield
    end

    ensure
      Firm.current = nil
    end
  end

a następnie dowolny kontroler, który chcę, aby był objęty zakresem, dziedziczy po TenantController, a nie ApplicationController. W ten sposób nie musiałem niczego zapamiętywać w szczegółach kontrolera, po prostu zadziałał. jedyną rzeczą, o której musieli pomyśleć programiści, było „czy to jest kontroler, który obsługuje dane najemców?”

Chociaż nadal zależy to od tego, czy programiści zrobią kilka rzeczy poprawnie (dziedziczenie po odpowiednim kontrolerze, powiedzenie „acts_as_multitenant” w modelu, w praktyce działa to naprawdę dobrze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić, czy ciąg jest w formacie JSON, czy nie?

  2. Wstaw do tabeli, która ma myślnik w nazwie

  3. PHP wyświetla obrazy z bazy danych

  4. MySQL LOAD_FILE zwraca NULL

  5. Konstruktor zapytań Codeigniter używający funkcji implode w where_in