0

私は比較的初心者で、cancanを簡単なプロジェクトで機能させようとしています。Railscastをフォローしてドキュメントを読みましたが、何かが足りません。

私が抱えている問題は2つあります。

  1. 編集/作成リンクが一般ユーザーに対して正しく非表示になっています。ただし、管理者ユーザーには非表示になっています。
  2. 上記のリンクを非表示にするためのコードをコメントアウトすると、管理者ユーザーがそれらをクリックすると、非管理者ユーザーに表示されるアクセス拒否メッセージが表示されます。

ですから、私の問題は、アプリが能力を正しくチェックしていないことだと思います。データベースを確認しましたが、このユーザーの役割列に「admin」が正しく入力されています。

これが私のユーザーモデルです:

class User < ActiveRecord::Base
  has_secure_password

  #this is for authentication
  attr_accessible :email, :password, :password_confirmation, :role
  validates_uniqueness_of :email
  #end of authentication

 end

インストラクターコントローラーで、上部に「load_and_authorize_resource」を追加しました。

私のAbility.rbファイルは次のようになります

class Ability
  include CanCan::Ability

  def initialize(user)
    # Define abilities for the passed in user here. For example:
    #
      user ||= User.new # guest user (not logged in)
      if user.admin?
        can :manage, :all
      else
        can :read, :all
      end
  end
end

私がこのコードを持っている役割に基づいてコントロールを隠している私の見解:

    <% if can? :manage, Instructor %>
<td><%= link_to 'Edit', edit_instructor_path(instructor) %></td>
<td><%= link_to 'Destroy', instructor, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    <% end %>

すべての助けは大歓迎です。

ありがとう

スコット

4

2 に答える 2

0

これの代わりに

<% if can? :manage, Instructor %>

これを試して

<% if user.has_role? :admin %>

(アプリで、管理者がインストラクターよりも多くの権限を管理/所有していると仮定します。)

于 2012-12-02T23:51:58.513 に答える
0

私が変更され:

if user.admin?

if user.id

そしてそれは完璧に機能しました

于 2012-12-03T04:00:39.640 に答える