2012-02-14 10 views
0

私は単純なブログスタイルのアプリケーションを構築しています。私は実際に管理者と管理者以外のユーザーしか必要としないので、管理者(ブール値)と呼ばれるユーザーモデルに単純な列があるように思えます。ユーザモデル、attr_accessibleおよびadmin

私は今すぐ認可のためにDeviseを使用しています。管理列が追加されています。私はseeds.rbにデフォルトの管理者(自分)を設定しようとしていますが、adminの列をattr_accessibleに追加しない限り、adminはfalseとなります。しかし、これはセキュリティ上の懸念であると思われますが、私は一般的に管理者ユーザーが別の管理者以外の人を作成できるようにしたくありません。これを行う正しい、安全な方法は何ですか?

答えて

0

あなたはattr_accessibleではないadminを残すのは間違いありません。これは一括割り当てで設定することができません。あなたはそれを単独で設定することによって、あなたの種子にadminを設定することができます。例:

user = User.new(:name => 'joe') ... 
user.admin = true 
user.save 
+0

また、 'User.create(name: 'joe'){| u | u.admin = true} 'そのために – Alexey

2

内部でadminブール値の設定を処理する必要があります。それを大量割り当てに公開しないでください。

最初のユーザー(あなた)を自動的に管理者にデフォルト設定させてください。 ...あなたのコントローラに...

# models/user.rb 
before_create :make_first_user_an_admin 

def make_first_user_an_admin 
    self.admin = self.class.count == 0 # sets true if no users exist, false otherwise 
end 

はその後adminshipを設定するには、インスタンスメソッドを使用して...このため

# models/user.rb 
def toggle_admin 
    self.admin = !self.admin 
    save 
end 

ガードこの方法をbefore_createメソッドを使用し

# controllers/users_controller.rb 
def change_adminship 
    if current_user.admin 
    @user.toggle_admin 
    else 
    raise "Can't do that." 
    end 
end