A-identifies tenants via subdomain (ie acme.grokklab.com) B-implmeents tenant data seperation via Postgres schema's C-Uses Devise, CanCan and Rolify for authentication and authorization D-has kickass schema migration tasks!
-
git clone git@github.com:GrokkLab/Sabertooth.git
-
bundle install
-
create login role Sabertooth in postgres
-
rake db:create
-
rake db:migrate
-
rake db:seed
-
That’s it! You now have 5 logins available: user@example.com, admn@example.com, exec@example.com, mgmt@example.com and tech@example.com (password is ‘please’ for each). Each user gets a view specific to their role.
Sabertooth works just fine as a single tenant app, but maybe you need to support 2 or 3 or eleventeen different organizations. No problem. Sabertooth comes with some easy-peasy rake tools to do just that.
Spose your new tenant is named ‘acme’, then…
rake tenant:reset TENANT_NAME=acme
This automatically creates the schema ‘acme’, migrates that schema to current state and then seeds that schema with data. Piece O Cake.
Tip: now that you’ve got multi-tenancy, you’ll need to add a subdomain. If you’re rockin’ some flavor of unix this will be as simple as adding entries into your /etc/hosts file. Something like this…
127.0.0.1 acme.grokklab.com 127.0.0.1 bnsf.grokklab.com etc...
Refresh your DNS cache (for macs -> dscacheutil -flushcache) and then point your browser at acme.grokklab.com and you are now looking at ACME’s web app.
Items can have children Items, and those children can have their own children and so on. In short the Item model can now represent any aribitrary tree structure with parent-child relationships. A breadcrumb is shown in the header of the Items ‘show’ view and illustrates where in the heirarchy a particular Item is.
Enjoy!