1

私はレールに不慣れで、私の人生ではカンカンを「取得」していません。

このチュートリアルを読みましたが、自分の状況に指示を適用する方法がわかりません。

cancan wiki には次のようなものがあります。

  • AdminController
  • roll_logs アクション

能力クラスには次のように書かれています:

can :roll, :logs if user.admin?

:roll および :logs シンボルがコントローラーおよびアクションと何をしなければならないのかわかりませんか?

私がしたいのは、ユーザーが管理者である場合は、AdminController アクションへのアクセスを許可することです。それ以外の場合は許可しないでください。これは可能ですか?

4

1 に答える 1

1

はい、これは可能です。

ステートメント

can :roll, :logs if user.admmin?

authorize! :roll, :logsユーザーが管理者でない場合、不正な例外を呼び出すとスローされることを意味します。

したがって、それを作成するまでは、コントローラーやアクションとは何の関係もありません。

たとえば、アクションロールを備えたlogs_controllerがある場合、次のようなことができます。

class LogsController < ApplicationController

  def roll
    authorize! :roll, :logs

    # Rest of the roll functionality.
  end

したがって、この例では、すべての管理コントローラー アクションにアクセスするための管理者アクセス許可をユーザーに付与します。

こんな感じで達成できます。

アビリティ.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    can(:manage, :admin) if user.admin?
  end
end

admin_controller.rb

class AdminController < ApplicationController

 authorize_resource :class => false

 def foo
 end

 def bar
 end

end

これにより、管理者のみが admin_controller の foo および bar アクションにアクセスできるようになります。

この:class => falseステートメントは、リソースを承認していないことを意味します。たとえば、特定の投稿やコメントを承認していないため、これは私たちが望んでいることです。コントローラーでのアクションを承認しているだけです。

于 2013-05-03T08:38:32.450 に答える