<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>app/models/membership.rb</filename>
    </added>
    <added>
      <filename>db/migrate/052_add_user_admin_bool.rb</filename>
    </added>
    <added>
      <filename>db/migrate/053_create_memberships.rb</filename>
    </added>
    <added>
      <filename>test/fixtures/memberships.yml</filename>
    </added>
    <added>
      <filename>test/unit/membership_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -14,6 +14,10 @@ class Site &lt; ActiveRecord::Base
   has_many  :assets, :as =&gt; :attachable, :order =&gt; 'created_at desc'
   has_many  :assets, :order =&gt; 'created_at desc', :conditions =&gt; 'parent_id is null'
 
+  has_many :memberships
+  has_many :members, :through =&gt; :memberships, :source =&gt; :user
+  has_many :admins,  :through =&gt; :memberships, :source =&gt; :user, :conditions =&gt; ['memberships.admin = ? or users.admin = ?', true, true]
+
   before_validation :downcase_host
   before_validation :set_default_timezone
   before_validation_on_create :set_default_comment_options</diff>
      <filename>app/models/site.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,15 @@
 class User &lt; UserAuth
+  @@admin_scope = {:find =&gt; { :conditions =&gt; ['admin = ?', true] } }
   has_many :articles
   acts_as_paranoid
 
+  has_many :memberships
+  has_many :sites, :through =&gt; :memberships, :order =&gt; 'title, host'
+
+  def self.find_admins(*args)
+    with_scope(@@admin_scope) { find *args }
+  end
+
   def to_liquid
     [:login, :email].inject({}) { |hsh, attr_name| hsh.merge attr_name.to_s =&gt; send(attr_name) }
   end</diff>
      <filename>app/models/user.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,4 +6,5 @@ default:
   crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
   activated_at: &lt;%= Time.now.utc.to_s :db %&gt;
   created_at: &lt;%= Time.now.utc.to_s :db %&gt;
-  updated_at: &lt;%= Time.now.utc.to_s :db %&gt;
\ No newline at end of file
+  updated_at: &lt;%= Time.now.utc.to_s :db %&gt;
+  admin: true
\ No newline at end of file</diff>
      <filename>db/bootstrap/users.yml</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@
 # migrations feature of ActiveRecord to incrementally modify your database, and
 # then regenerate this schema definition.
 
-ActiveRecord::Schema.define(:version =&gt; 51) do
+ActiveRecord::Schema.define(:version =&gt; 53) do
 
   create_table &quot;assets&quot;, :force =&gt; true do |t|
     t.column &quot;content_type&quot;,     :string
@@ -95,6 +95,13 @@ ActiveRecord::Schema.define(:version =&gt; 51) do
     t.column &quot;site_id&quot;,    :integer
   end
 
+  create_table &quot;memberships&quot;, :force =&gt; true do |t|
+    t.column &quot;site_id&quot;,    :integer
+    t.column &quot;user_id&quot;,    :integer
+    t.column &quot;created_at&quot;, :datetime
+    t.column &quot;admin&quot;,      :boolean,  :default =&gt; false
+  end
+
   create_table &quot;sections&quot;, :force =&gt; true do |t|
     t.column &quot;name&quot;,                :string
     t.column &quot;show_paged_articles&quot;, :boolean, :default =&gt; false
@@ -152,6 +159,7 @@ ActiveRecord::Schema.define(:version =&gt; 51) do
     t.column &quot;remember_token&quot;,            :string
     t.column &quot;remember_token_expires_at&quot;, :datetime
     t.column &quot;filter&quot;,                    :string
+    t.column &quot;admin&quot;,                     :boolean,                 :default =&gt; false
   end
 
 end</diff>
      <filename>db/schema.rb</filename>
    </modified>
    <modified>
      <diff>@@ -11,6 +11,7 @@ quentin:
   remember_token: quentintoken
   remember_token_expires_at: &lt;%= 5.days.from_now.to_s :db %&gt;
   # activated_at: &lt;%= 5.days.ago.to_s :db %&gt; # only if you're activating new signups
+  admin: true
 arthur:
   id: 2
   login: arthur</diff>
      <filename>test/fixtures/users.yml</filename>
    </modified>
    <modified>
      <diff>@@ -46,6 +46,10 @@ class UserTest &lt; Test::Unit::TestCase
     assert_equal '', users(:quentin).reload.filter
   end
 
+  def test_should_find_admins
+    assert_models_equal [users(:quentin)], User.find_admins(:all)
+  end
+
   protected
     def create_user(options = {})
       User.create({ :login =&gt; 'quire', :email =&gt; 'quire@example.com', :password =&gt; 'quire', :password_confirmation =&gt; 'quire' }.merge(options))</diff>
      <filename>test/unit/user_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a8e03e5772c8a9123606bfe4018f8b2f78f18b71</id>
    </parent>
  </parents>
  <author>
    <name>technoweenie</name>
    <email>technoweenie@567b1171-46fb-0310-a4c9-b4bef9110e78</email>
  </author>
  <url>http://github.com/francois/mephisto/commit/2bdff7b66cf6bbbad6e365e7393546af7c2deb7e</url>
  <id>2bdff7b66cf6bbbad6e365e7393546af7c2deb7e</id>
  <committed-date>2006-09-06T00:21:00-07:00</committed-date>
  <authored-date>2006-09-06T00:21:00-07:00</authored-date>
  <message>add simple site memberships

git-svn-id: http://svn.techno-weenie.net/projects/mephisto/trunk@2090 567b1171-46fb-0310-a4c9-b4bef9110e78</message>
  <tree>a1f1e06d1e5f85768954dcb93d89f920794aac1e</tree>
  <committer>
    <name>technoweenie</name>
    <email>technoweenie@567b1171-46fb-0310-a4c9-b4bef9110e78</email>
  </committer>
</commit>
