← Back to list

multi-tenant-accounts
by rbarazi
⭐ 0🍴 0📅 Jan 13, 2026
SKILL.md
name: multi-tenant-accounts description: Implement multi-tenant architecture using an Account model as the tenant boundary. Use when building SaaS applications, team-based apps, or any system where data must be isolated between organizations/accounts.
Multi-Tenant Account Pattern
Account-based multi-tenancy for Rails applications. All resources scoped to accounts for data isolation.
Quick Start
- Create Account model as the tenant container
- Add
belongs_to :accountto User model - Configure Current model to delegate account from session
- Scope all resources via
Current.account
Core Architecture
Account (tenant boundary)
└── Users (belong to account)
└── All resources (scoped to account)
Current.session → Current.user → Current.account
Components
| Component | Purpose | Reference |
|---|---|---|
| Account model | Tenant container | models.md |
| User-Account relationship | User scoping | models.md |
| Current model | Request-scoped access | models.md |
| Controller scoping | Safe queries | controllers.md |
| Database migrations | Schema design | migrations.md |
| Testing patterns | Isolation tests | testing.md |
Minimal Implementation
Account Model
class Account < ApplicationRecord
has_many :users, dependent: :destroy
has_many :agents, dependent: :destroy # Example resource
validates :name, presence: true, uniqueness: true
end
User-Account Association
class User < ApplicationRecord
belongs_to :account
has_secure_password
end
Current Model
class Current < ActiveSupport::CurrentAttributes
attribute :session
delegate :user, to: :session, allow_nil: true
delegate :account, to: :user, allow_nil: true
end
Controller Scoping
class AgentsController < ApplicationController
def index
@agents = Current.account.agents # Always scope to account
end
def show
@agent = Current.account.agents.find(params[:id]) # Security critical!
end
end
Critical Security Pattern
# CORRECT - scoped to account
@agent = Current.account.agents.find(params[:id])
# WRONG - exposes all accounts' data!
@agent = Agent.find(params[:id]) # SECURITY VULNERABILITY
Account Access Pattern
# Anywhere in your application:
Current.account # => #<Account id: "abc-123">
Current.user # => #<User id: "xyz-456">
Current.account.agents # => [Agent, Agent, ...]
Current.account.users # => [User, User, ...]
Detailed References
- models.md: Account model, associations, junction tables
- controllers.md: Controller scoping patterns, settings controllers
- migrations.md: Database schema and migrations
- testing.md: Testing multi-tenant isolation
- patterns.md: Common patterns and anti-patterns
Score
Total Score
50/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon