2010-09-15 66 views
0

考慮以下模型:鑑於以下模型,如何確定用戶的角色?

class User < AR::B 
    has_many :permissions 
    has_many :projects, :through => :permissions 
end 
class Project < AR::B 
    has_many :permissions 
    has_many :users, :through => :permissions 
end 
class Role < AR::B 
    has_many :permissions 
end 
class Permission < AR::B 
    belongs_to :user 
    belongs_to :project 
    belongs_to :role 
end 

在user.rb模型,,,我怎麼能得到用戶對項目的許可?

類似 self.permissions.role?

謝謝!

回答

2

您可以將實例方法添加到將項目作爲參數並返回權限的User模型。

class User < AR 
    def permission_for_project(project) 
    permissions.find_by_project_id(project.id) 
    end 

    def role_for_project(project) 
    permission = permissions.find_by_project_id(project.id) 

    permission.role unless permission.nil? 
    end 
end 

然後使用它像:

user = User.find(n) 
project = Project.find(n) 

permission = user.permission_for_project(project) 

role = user.role_for_project(project) 
+0

謝謝,這很接近,但它不會返回Roles表中的role.name。以下是來自日誌的查詢:「SELECT」權限「。* FROM」permissions「WHERE(」permissions「.user_id = 1)AND(」permissions「。」project_id「= 1)LIMIT 1」如何更新返回該項目的用戶角色(如果有的話)? thxs! – AnApprentice 2010-09-15 22:52:47

+1

我更新它來添加一個返回項目角色的方法。如果沒有權限,它將返回零 – 2010-09-15 22:59:51

+0

這真是太棒了 - 謝謝! – AnApprentice 2010-09-15 23:22:45

1
(the_role = user.permissions.find(:first, project_id => project_id).role) && 
    the_role.name 

應該查找該用戶擁有該項目的(第一)的許可,並得到了作用。如果有一個角色,那麼它會返回名稱,如果沒有,它將返回零。

+0

謝謝Shadwell你的答案已經死了。 – AnApprentice 2010-09-15 23:23:08

相關問題