1

dept_techロールがアクセスできないdeptpartmentsでdept_techロールがユーザーを作成するのを止められないのはなぜですか?

自動化にはcancanを使用し、ビューにはsimple_formを使用しています。ユーザーモデルと部門モデルがあります。

class User < ActiveRecord::Base
  belongs_to :department
  ...
end

class Department < ActiveRecord::Base
  has_many :departments
  ...
end

能力モデルもあります

class Ability
  include CanCan::Ability

  def initialize(user)
    Rails.logger.debug {" >>>>>>> user id: #{user.id} ......
    if user.role? :admin
     ...
    elseif user.role? :dept_tech
      Rails.logger.debug {" >>>>>>> role 6 ......
      can :manage, User, :department_id => user.department_id
      can :read, Department, :id => user.department_id
      Rails.logger.debug {" >>>>>>> user.department: #{user.department_id}}
    end
  end
 end

およびユーザーコントローラー:

load_and_authorize_resource
...
def new

  respond_to do |format|
    Rails.logger.debug {" >>>> here"}
    format.html # new.html.erb
  end
  Rails.logger.debug {" >>>> there"}
end
...

もあります

load_and_authorize_resource

部門コントローラーで。

およびsimple_formを使用した_formビューヘルパー

<% simple_form_for @user, :html => {class => 'form-horizontal' } do |f| %>
  <%= f.input :email %>
  Rails.logger.debug {" >>>> view"}
  <%= f.association :department %>
  ....
<% end %>

これはうまく機能します。dept_techは部門のアクションのインデックス作成と表示のみを実行できます。また、インデックス、ユーザーのアクションの表示にも適しています。ただし、ユーザーに対して新しいアクションを実行すると、dept_techの部門だけでなく、departmentのcollection_selectにすべての部門が表示されます。

dept_techは、自分の部門のユーザーのみを作成(管理)できると考えています。

これはログであり、部門が選択する場所なしで選択が使用され、ビューで実行されることを示しています。

Started GET "/users/new" for 127.0.0.1 at 2012-06-05 13:57:58 +0200
[2012-06-05 13:57:58 +0200] Processing by UsersController#new as HTML
[2012-06-05 13:57:58 +0200]   User Load (0.9ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 2]]
[2012-06-05 13:57:58 +0200]  >>>> User id: 2, User role: ["dept_tech"], roles_mask: 64
[2012-06-05 13:57:58 +0200]  >>>> Role 6
[2012-06-05 13:57:58 +0200]  >>>> user.department: 2
[2012-06-05 13:57:58 +0200]  >>>> here
[2012-06-05 13:57:58 +0200]  >>>> view
[2012-06-05 13:57:58 +0200]   Department Load (0.9ms)  SELECT "departments".* FROM "departments" 
[2012-06-05 13:57:58 +0200]   Rendered users/_form.html.erb (45.7ms)
[2012-06-05 13:57:58 +0200]   Rendered users/new.html.erb within layouts/application (46.5ms)
[2012-06-05 13:57:58 +0200]  >>>> there
[2012-06-05 13:57:58 +0200] Completed 200 OK in 63ms (Views: 56.4ms | ActiveRecord: 1.8ms)

ログは、当然のことながら、SQLがビューで呼び出されることを示しています。これはsimple_formの問題ですか?の解き方?

4

0 に答える 0