0

シンプルなブログスタイルのアプリケーションを構築しています。本当に必要なのは管理者ユーザーと非管理者ユーザーだけなので、ユーザー モデルに admin (boolean) という単純な列があれば十分だと思われます。

私は現在、認証にDeviseを使用しており、管理者の列が追加されています。でデフォルトの管理者ユーザー (自分自身) をセットアップしようとしていますが、管理者列を に追加しない限り、管理者seeds.rbは次のようになります。ただし、これはセキュリティ上の問題になると思われます。また、別の管理者以外が管理者ユーザーを作成できるようにしたくないのが一般的です。これを行うための正しい、安全な方法は何ですか?falseattr_accessible

4

2 に答える 2

2

adminブール値の設定を内部で処理したい。一括割り当てに公開しないでください。

ユーザー モデルを自動的にデフォルトで最初のユーザー (あなた) を管理者に設定します。これにはメソッドを使用しbefore_createます...

# 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

次に、インスタンス メソッドを使用して管理者を設定します...

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

コントローラーでこのメソッドを保護します...

# controllers/users_controller.rb
def change_adminship
  if current_user.admin
    @user.toggle_admin
  else
    raise "Can't do that."
  end
end
于 2012-02-14T02:09:10.077 に答える
0

admin を attr_accessible ではないままにしておくことは非常に正しいです。これは、一括割り当てによる設定を無効にするだけです。個別に設定することで、シードに admin を設定できます。例:

user = User.new(:name => 'joe') ...
user.admin = true
user.save
于 2012-02-14T03:11:41.033 に答える