1

ここの優れた一連の記事: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/comment-page-2/#comment -908 認証にdeviseを使用し、許可にcancanを使用する方法について少し説明しています。もっと単純に思える質問があります (そのため、これらの記事では省略されています)。

Ability クラスからアクセスできるようにするには、:super_admin などのシンボルをどこに定義すればよいですか? これらの定義はどのように見えるべきですか?

定義が Role クラスに属していると確信していますが、もしそうなら、単に :super_admin として Ability クラスで (範囲内で) どのように利用できるのでしょうか?

4

2 に答える 2

2

シンボルは、定数のような効率的な文字列と考えることができます。それらを明示的に定義するのではなく、単にそれらを使用します-そしてそれはおそらくあなたが混乱しているところです。また、シンボルを「使用するだけ」なので、スコープはありません。シンボルをそのよう:duper_adminに誤って入力した場合、rubyがそのシンボルを喜んで作成するため、エラーチェックは行われません。

この記事では、作成者がrolesテーブル内の役割を定義しています。では、データベース内の役割を、次のような役割記号とどのように比較します:super_adminか?この方法を使用することにより

def role?(role)
  return !!self.roles.find_by_name(role.to_s.camelize)
end

それはそのように使用されます

if user.role? :super_admin
  can :manage, :all
...

このrole?メソッドは、シンボルを文字列に変換するだけなので、データベース内の値と比較できます。rolesテーブルと使用されているシンボルの間でプログラムによるマッピングは行われません。それらは手動で同期されているだけです。

于 2012-08-20T02:43:30.717 に答える
0

シンボルのポイントは、Ruby インタープリターが各シンボルのコピーを 1 つだけ作成することです。1つのrubyファイルに書き込むと、他のすべてのrubyファイルの他:fooのすべてと同じになり:fooます。事前にシンボルを定義または宣言する必要はありません。

于 2012-08-20T02:10:05.407 に答える