Rails 4 アプリにロール ベースのアクセス システムを実装しようとしています。エンド ユーザー (super_admin) が UI を介してロールの割り当てを編集できるようにしたいと考えています。
私はある程度の成功を収めましたが、もっと良い方法が必要だと感じずにはいられません (私はレールに慣れていないため)。これが私のコードです:
users_roles_controller.rb
# GET /user_roles/new/:id
def new
@roles = Role.all
end
# POST /user_roles/new/:id
def create
populated = params[:roles][:name].reject(&:empty?)
populated.each do |key|
@user.add_role Role.find(key).name
end
redirect_to users_path
end
そして私のフォーム(HAMLとsimple_form)で:
= simple_form_for :roles, :url => create_user_roles_path(@user.id), :method => "post" do |f|
= f.input :name, :collection => @roles, as: :check_boxes
= f.button :submit
私は次のことに苦労しています:
- モデルがないため、フォーム エントリを検証するにはどうすればよいですか?
- 強力なパラメーターを使用する必要がありますか? その場合、モデルを使用せずにフォームに実装するにはどうすればよいですか?
- 似たようなものを作成するにはどうすればよいですか?ただし、現在の役割が既にチェックされていますか? (真の役割管理)
更新 コメントで示唆されているように、reform Gem の使用を検討しました。これは素晴らしい解決策のようです。ただし、この場合の実装には問題があります。
マップを作成しましょう: データベースに 3 つのテーブルがあります。
- ユーザー
- users_roles (2 つの属性を持つマッピング テーブル: user_id & role_id {Join Table -> HABTM})
- 役割
Roles モデルのすべての値をチェックボックスとして使用してフォームを作成したいと考えています。チェックボックスは、users_roles テーブルに入力される値を指定する必要があります (特定のユーザーに関連して)。私が改革に望んでいるのは、このフォームの入力を検証することです。このフォームには常に役割のすべての値が表示されますが、一部またはすべてのボックスがオフになっている場合があります。
アプリにフォーム フォルダーを作成し、次のコードから始めました。
class UserRoleForm < Reform::Form
property :user__id, on: :user
property :role_id, on: :role
validates :user__id, presence: true
validates :role__id, presence: true
end
私は正しい方向に進んでいますか?
助けてくれてありがとう。