This is how I approached multi-tenancy in my application: Every user can
be a part of one or multiple accounts (groups) through membership model.
And because someone has to be in charge of the account (pay bills, admin
stuff, etc), membership model has a boolean flag is_owner.
In application, all authenticated user routes are scoped by :account_id.
After user logs in, he selects an account he want to open, and I
redirect him to scoped overview page with account_id (for ex.
https://example.com/123/overview). To avoid passing account_id parameter
to every link on a page I set default_url_options to include it
automatically.
To ensure that all shown data is part of that account, data models have
account_id column, and I query those models through account association,
for example:
@posts = current_account.posts

(current_account is a helper method which returns account object from
params[:account_id])
And of course, I do user account/membership authorisation on every
request so user could not access other accounts data by changing
account_id in address bar.
Rolandas

On Mon, Jan 22, 2018, at 04:20, fugee ohu wrote:
> 
> 
> On Sunday, January 21, 2018 at 7:28:54 PM UTC-5, Walter Lee
> Davis wrote:>> 
>> > On Jan 20, 2018, at 10:44 PM, fugee ohu <fuge...@gmail.com> wrote:>> > 
>> > is multitenancy only for apps that have users? 
>> 
>> Maybe. It depends on how you define it. Think about Basecamp for an
>> example. Each user of that system logs into their own subdomain and
>> manages their own data, without ever being able to access or see any
>> other user's data. Yet if you are the owners of Basecamp, you think
>> of it as one big site, with many users. Each user can make changes to
>> the application that govern how it will appear to their clients, and
>> that doesn't affect another user's clients' view of the site. Think
>> about the most popular Gem in this arena -- it's named Apartment.
>> What does an apartment have? Individual rooms where renters can
>> change whatever they like without affecting anyone else in the
>> building. Yet the owner thinks of it as one big building.>> 
>> So it's philosophical first, and then practical. What is the
>> application you are trying to build? Is it meant for one client,
>> or many users, each with their own group of sub-users? Or
>> something else?>> 
>> Walter 
>> 
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google
>> > Groups "Ruby on Rails: Talk" group.>> > To unsubscribe from this group and 
>> > stop receiving emails from it,
>> > send an email to rubyonrails-ta...@googlegroups.com.>> > To post to this 
>> > group, send email to rubyonra...@googlegroups.com.>> > To view this 
>> > discussion on the web visit
>> > https://groups.google.com/d/msgid/rubyonrails-talk/d6a41c52-badd-41ba-8d86-e47072611f0e%40googlegroups.com.>>
>> >  > For more options, visit https://groups.google.com/d/optout. 
>> 
> 
> What can my user's users do for me Let's say I have only 10 users but
> one of those users has a large number of users What's that do for my
> site? Am I gonna show my ads on their pages?> 


> --
>  You received this message because you are subscribed to the Google
>  Groups "Ruby on Rails: Talk" group.>  To unsubscribe from this group and 
> stop receiving emails from it,
>  send an email to rubyonrails-talk+unsubscr...@googlegroups.com.>  To post to 
> this group, send email to rubyonrails-
>  t...@googlegroups.com.>  To view this discussion on the web visit
>  
> https://groups.google.com/d/msgid/rubyonrails-talk/e0067bed-d662-4d62-af94-7669fb74fbf3%40googlegroups.com[1].>
>   For more options, visit https://groups.google.com/d/optout.


Links:

  1. 
https://groups.google.com/d/msgid/rubyonrails-talk/e0067bed-d662-4d62-af94-7669fb74fbf3%40googlegroups.com?utm_medium=email&utm_source=footer

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/1516611935.1127409.1243498648.6131A7B2%40webmail.messagingengine.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to