Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yshmarov/actsastenant-demo
Row-based multitenancy example. A User can be a Member of multiple Tenants
https://github.com/yshmarov/actsastenant-demo
actsastenant demo multitenancy ruby-on-rails
Last synced: about 1 month ago
JSON representation
Row-based multitenancy example. A User can be a Member of multiple Tenants
- Host: GitHub
- URL: https://github.com/yshmarov/actsastenant-demo
- Owner: yshmarov
- Archived: true
- Created: 2020-06-01T18:32:06.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-06-10T21:51:20.000Z (over 4 years ago)
- Last Synced: 2024-08-05T08:08:09.359Z (5 months ago)
- Topics: actsastenant, demo, multitenancy, ruby-on-rails
- Language: Ruby
- Homepage: https://saascorsego.herokuapp.com/
- Size: 211 KB
- Stars: 5
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- Open-Source-Ruby-and-Rails-Apps - actsastenant-demo - Row-based multitenancy example. A User can be a Member of multiple Tenants 🔥 ✅ 🚀 (Happy Exploring 🤘)
README
# README
SaaS (organisations can have many members; organisation is billed)
haml
devise
simple_form
https://github.com/scambra/devise_invitable1. Basic multitenant +
* User can register in the application.+
* User can create many tenants.+
* When a user creates a tenant, he becomes a tenant member. +
* User can see a list of tenants where he is a member (my_tenants scope).+
* User can see only tenants where he is a member.-1.1. Users
* Users can exist without belonging to a member or a tenant. +
* User table and user show pages exist. +1.2. Tenants
* All tenants scope +1.2. devise_invitable - new user, new member +
* User can invite other users to become members of a tenant via email. +
* If a user with this email exists, we check if he is a member of this tenant. If he is not, he becomes a member. +
* If a user with this email does not exist, he gets an invitation email via devise invitable + he becomes a member. +
* #Note: devise_invitable has invitation on User model. If User accepts invitation once, he accepts all of them!1.3. devise_invitable - new user, resend invitation +
* If the user has not confirmed his email, he can be re-invited +1.3. OPTIONAL: member of a tenant can exist without user?
* devise_invitable - new user, old member
** A user can create a member without relation to another user in a tenant.
** A user can invite another user to use the member record via email.1.4. subdomains
* When creating a tenant, a user can type in a subdomain. +
* Subdomains have restriction (permitted names, uniqueness). +
A user can edit his subdomain. +
If he does not type in a subdomain, a random one is assigned.
When a user select..1.2. acts_as_tenant
Current_tenant is set by session/subdomain.
Members are scoped by current_tenant.
All models except User and Tenant are scoped by current_tenant.Alternative Easy way (no subdomains)
* add a tenant_id to user table.
* when a user selects a tenant, his tenant_id is updated.
* now, he sees views scoped by this tenant.2. Billing
* rails g migration CreatePlans name:string price:integer billing_period:integer
* Tenant belongs_to plan
* #what if the app is modular and Tenant can select a lot of different billed features?
* constraints {}3. Roles
Roles are scoped by tenant.
When a user creates a tenant, he becomes the tenant admin.
Admin:
* Invite / delete members.
* Change member roles.
* Access to billing.
* Access to tenant settings.
Moderator:
* Everything except admin.
Viewer:
* Only view what moderator can do.4. ransack, public_activity, friendly_id
find tenant by subdomain
https://medium.com/@praaveen/multi-tenancy-and-sub-domain-lvh-with-rails-f364c9dc0566