2012-09-16 60 views
1

,並開始學習康康舞+設計Rails的康康舞ability.rb

我有 '用戶' 表(設計)

我有 '帖子' 表(與 'USER_ID' 字段)

我有 '角色' 表(具有 '名稱' 字段)

  • 1 - 管理員
  • 2 - 用戶

我有users_roles(與 'USER_ID' 和 'ROLE_ID')

我創建2個用戶 '用戶' 角色

並創建1個用戶具有 '管理員' 角色

user.rb 
    has_many :posts 
    has_many :users_roles 
    has_many :roles, :through => :users_roles 

role.rb 
    has_many :users_roles 
    has_many :users, :through => :users_roles 

users_role.rb 
    belongs_to :user 
    belongs_to :role 

而且有一個問題:

i create ability.rb 

def initialize(user) 
    user ||= User.new 
    if user.persisted? 
     #loged in 
     can :read, Post 
     can :create, Post 
     can :update, Post , :user_id => user.id 
     can :destroy, Post , :user_id => user.id 
    else 
     #not logged 
     can :read, Post 
    end 

在我的意見/職位/ index.html.erb

<% @posts.each do |post| %> 
    <tr> 
    <td><%= post.user.email %></td> 
    <td><%= post.title %></td> 
    <td><%= post.text %></td> 
    <td><%= link_to 'Show', post %></td> 
     <% if can? :update, Post %> 
     <% if current_user.id == post.user.id %> 
      <td><%= link_to 'Edit', edit_post_path(post) %></td> 
     <% end %> 
     <% end %> 
     <% if can? :destroy, Post %> 
     <% if current_user.id == post.user.id %> 
      <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     <% end %> 
    <% end %> 
    </tr> 

<% end %> 
</table> 

<br /> 
<!-- ???почему Post ? --> 
<% if can? :create, Post %> 
    <%= link_to 'New Post', new_post_path %> 
<% end %> 

在這種情況下我檢查,如果用戶登錄 - 他可以讀取和創建,更新,破壞(如果他是作者日期),如果用戶沒有登錄(來賓) - 只能讀取

,但我不知道如何改變我的ability.rb做到這一點:

  • 我有客人(只讀)
  • 我有用戶(可以讀取和創建,更新,破壞(如果他是作者日期))
  • 我有一個管理員(可以讀取,創建,更新,銷燬)

我已經有作用表(2個角色)和3個用戶(1個具有管理員角色,2個具有用戶角色)

回答

1

這是我在我的應用程序中實現了cancan以管理角色和訪客用戶的方式。

只需使用if user.role == role來驗證用戶是否具有正確的角色。

class Ability 
include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user 
    if user.role == "author" 
     # 
     can :read, Post 
     can :create, Post 
     can :update, Post , :user_id => user.id 
     can :destroy, Post , :user_id => user.id 

     # a simple way to realize read create update and destroy is :manage 
     # can :manage, Post, :user_id => user.id 

    else 
     if user.role == "admin" 
     # User with role admin can manage all on all models 
     can :manage, :all 
     else 
     # Guest user can only read something 
     can :read, Post 
     # or 
     # can :read, [SomeModel1, Somemodel2] 
     # can :read, :all  # this means he can read all models 
end 
+0

我得到了

+0

我有:,通過關係(我解決了這個問題) –

相關問題