2012-04-19 21 views
0

私はdeviseとcancanを使用して認証と承認を行うアプリケーションを作成しました。 cancanを使用する私はadminとoperatorの2つの役割を定義しました。管理者はすべてを管理することができ、オペレータはすべてを編集できますが、削除することはできません.3人目は作成して管理できる通常のユーザーです。しかし、コードはデフォルトのelseブロックだけになります。これは私の能力クラスとのindex.htmlRails:Cancanに関する問題

class Ability 
include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user 

    if user.role? :admin 
     can :manage, :all 
    elsif user.role? :operator 
     can :read, :all 
    else 
     can :read, :all 
    end 
    end 
end 

index.htmlをあなたの一瞬の設定によると

<h1>Listing todos</h1> 

<table> 
    <tr> 
    <th>Name</th> 
    <th>Description</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @todos.each do |todo| %> 
    <tr> 
    <td><%= todo.name %></td> 
    <td><%= todo.description %></td> 
    <% if can? :show, @todo %> 
    <td><%= link_to 'Show', todo %></td> 
    <% end %> 
     <% if can? :update, @todo %> 
    <td><%= link_to 'Edit', edit_todo_path(todo) %></td> 
    <% end %> 
     <% if can? :destroy, @todo %> 
    <td><%= link_to 'Destroy', todo, :confirm => 'Are you sure?', :method => :delete %></td> 
    <% end %> 
</tr> 
<% end %> 
</table> 

<br /> 
<% if can? :destroy, @todo %> 
<%= link_to 'New Todo', new_todo_path %> 
<% end %> 
+1

あなたは 'user.rb'のメソッド' role? 'を表示できます – MikDiet

答えて

1

、あなたのoperater-権限およびデフォルト・パーミッションが同じです。彼らは編集するのではなく、すべてのモデルを読む権利しか持っていません。唯一の他のブロックがトリガされますが、オペレータは能力を欠いていること。

if user.role? :admin 
    can :manage, :all 
elsif user.role? :operator 
    can :read, :all # no managing-abilities defined here 
else 
    can :read, :all # same abilities as operator 
end 

ので、正しく動作し-methodあなたrole?場合には、あなたの問題はないが、

+0

私はオペレータadminと通常のユーザに異なるCRUD機能を与えましたが、それでもすべてのユーザはデフォルトブロックこのような場合は、すべてのユーザーが読むことができるように変更する場合はこのように管理してください。役割はチェックボックスを使用して割り当てられており、DBに正しく反映されていますが、どこが間違っているか把握できません。 – Aayush

+0

申し訳ありません@AmritanshMishra、私はあなたが私に言っていることを理解していません。私があなたに言うことができる唯一のことは、オペレーターがあなたのモデルを修正することを許可しないことです。たとえば、あなたのビュー '<%if can? :update、@todo%> 'は、管理者にのみ適用され、モデルを読むことが許可されているので、あなたのオペレータには適用されません。 'can:manage、Todo'をあなたの操作者の能力に加えて、あなたが望む結果を得るかどうかを調べてみてください。 – klaffenboeck

+0

ありがとうございました!それは私を助けた! – Aayush