Account Scopper aims to make conversion from a single account to multi-accounts application as easy as possible.
Simply set your current_account before each request and the scoping will be done on it's own.
Account Scopper is NOT working with Rails 3.x
Due the the heavy lifting that Rails 3 had, account_scopper is NOT working with Rails 3.x and later
If new to gemcutter first run
sudo gem install gemcutter sudo gemcutter tumble
sudo gem install account_scopper
If using rails, in your `config/environment.rb`
To convert your application, you will need to make few changes :
Create an Account model and Accounts table
Add account_id to your existing models (except Account of course)
Define relationship between Account and other models
Add the class variable “current_account” to the model Account
Initialize Account.current_account before every request (eg: app/controllers/application.rb)
class Account < ActiveRecord::Base cattr_accessor :current_account has_many :users end
class User < ActiveRecord::Base belongs_to :account end
class ApplicationController < ActionController::Base before_filter :set_current_account # ... private # Don't forget that @current_account should be properly setup to be an Account object # for this purpose you can use the plugin AccountLocation from David Heinemeier Hansson def set_current_account Account.current_account = @current_account end end
What it does
The plugin overwrite few methods from ActiveRecord::Base
To have a better understanding of what it does, the best way is still to look at the code itself and the tests.
As account_scopper scopes all database requests, `validates_uniqueness_of` will also scope to the current account.
In some cases, you may like to make sure that somethings remain unique to your whole system.
(eg: the user login or email if logging in from a common page for all accounts)
For this purpose, you can use `validates_global_uniqueness_of`. This validations will make sure your attribute is unique over all accounts.
If using manually generated database requests like find_by_sql, … you'll have to do your own scoping
Note on Patches/Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but
bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Copyright © 2009 Sebastien Grosjean. See LICENSE for details.