1


0

declarative_authorizationおよびauthlogicの問題

(免責事項:私はレールに非常に新しいです)

このプラグインは、アプリに最適なように見えますが、機能させるのに苦労しています。 私はauthlogicでそれを使用していますが、それが問題であるかどうかはわかりませんが、それはそうかもしれません。

私の管理者ロールがアクセスできるはずのページにアクセスしようとすると、次のようになります。

Processing CompaniesController#show (for 127.0.0.1 at 2010-02-12
23:26:44) [GET]
Parameters: {"action"=>"show", "id"=>"1", "controller"=>"companies",
"battalion_id"=>"1"}
User Load (0.000681)   SELECT * FROM "users" WHERE ("users"."id" =
'147') LIMIT 1
User Update (0.000622)   UPDATE "users" SET "perishable_token" =
'tUyTl1eZDQSJwp_PFw7c', "last_request_at" = '2010-02-13 05:26:44',
"updated_at" = '2010-02-13 05:26:44' WHERE "id" = 147
Role Load (0.000334)   SELECT * FROM "roles" WHERE ("roles".user_id
= 147)
Permission denied: No matching rules found for show for # (roles
 [:Admin], privileges [:show], context :companies).
 Filter chain halted as [:filter_access_filter] rendered_or_redirected.
 Completed in 27ms (View: 1, DB: 0 3 queries) | 403 Forbidden [http://
 localhost/battalions/1/companies/1]

これは、ユーザーモデルdef role_symbols(ロール|| [])。map \ {| r |にあります。 r.name.to_sym} end

しかし、それを呼んでいるようには見えません。 私はそれが問題の核心かもしれないと思うが、それがuser_sessionsと関係があるのだろうかと思っている?

また、これは私のapplication_controllerがどのように見えるかです:

 helper_method :current_user_session, :current_user
 filter_parameter_logging :password, :password_confirmation

  before_filter :set_current_user
  protected
  def set_current_user
    Authorization.current_user = current_user
  end

  def current_user_session
    return @current_user_session if defined? (@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  def store_location
    session[:return_to] = request.request_uri
  end

  def redirect_back_or_default(default)
    redirect_to(session[:return_to] || default)
    session[:return_to] = nil
  end


Here is my authorization_rules.rb

私はそれを反映するために管理者を大文字にしました:

authorization do
   role :guest do
    has_permission_on :user_sessions, :to => [:create, :update]
   end

   role :Admin do
     has_permission_on :companies, :to => [:index, :show]
   end
 end

あなたが何かアイデアを持っているなら、私はそれを大いに感謝します。 ありがとう。

2 Answer


1


どうやら、アプリケーションはテーブル* roles *のルールを適切にロードしますが、config / authorization_rules.rbファイルを正しくロードしません。 ファイル、彼の名前、使用されている構文を確認してください。

_authorization_rules.rb_の* privileges *セクションを使用してみてください。このような:

privileges do
  privilege :manage, :includes => [:create, :read, :update, :delete]
  privilege :read, :includes => [:index, :show]
  privilege :create, :includes => :new
  privilege :update, :includes => :edit
  privilege :delete, :includes => :destroy
end

'' '' '

そして、会社のコントローラーはどうですか?

'' '' '

がんばろう。


0


_ 私はそれを反映するために管理者を大文字にしました _

それはどういう意味ですか? role_symbols`メソッドが機能しているようで、ユーザーロールの配列として [:Admin] を返しているため、adminロールは authorization_rules.rb`ファイルで大文字にする必要があります。 ログでそれを見ることができます:

_ (ロール[:Admin]、特権[:show]、コンテキスト:companies) _

これは、現在のユーザーが指定されたロールを持っているが、コンテキスト/リソースにアクセスするにはリストされた権限の少なくとも1つが必要であることを意味します。 したがって、 authorization_rules.rb`には大文字のロール:Admin`が必要です。