0

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

私は次のことに苦労しています:

  1. モデルがないため、フォーム エントリを検証するにはどうすればよいですか?
  2. 強力なパラメーターを使用する必要がありますか? その場合、モデルを使用せずにフォームに実装するにはどうすればよいですか?
  3. 似たようなものを作成するにはどうすればよいですか?ただし、現在の役割が既にチェックされていますか? (真の役割管理)

更新 コメントで示唆されているように、reform Gem の使用を検討しました。これは素晴らしい解決策のようです。ただし、この場合の実装には問題があります。

マップを作成しましょう: データベースに 3 つのテーブルがあります。

  1. ユーザー
  2. users_roles (2 つの属性を持つマッピング テーブル: user_id & role_id {Join Table -> HABTM})
  3. 役割

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

私は正しい方向に進んでいますか?

助けてくれてありがとう。

4

1 に答える 1