【问题标题】:Given the following Model, how to determine the User's Role?给定以下模型,如何确定用户的角色?
【发布时间】:2010-09-15 22:00:04
【问题描述】:

给定以下模型:

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 ?

谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3


    【解决方案1】:

    您可以将实例方法添加到将项目作为参数并返回权限的用户模型中。

    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)
    

    【讨论】:

    • 谢谢,这很接近,但它不会从 Roles 表中返回 role.name。以下是日志中的查询:“SELECT "permissions".* FROM "permissions" WHERE ("permissions".user_id = 1) AND ("permissions"."project_id" = 1) LIMIT 1" 如何更新为如果该项目有的话,返回用户的角色?谢谢!
    • 我更新了它以添加一个返回项目角色的方法。如果没有权限,它只会返回 nil
    • Beerlington 刚刚使用n 表示您要访问的项目的用户ID。例如,您可能有 User.find(params[:id])Project.find(params[:project_id])
    【解决方案2】:
    (the_role = user.permissions.find(:first, project_id => project_id).role) && 
       the_role.name
    

    应该查找用户对该项目拥有的(第一个)权限并获取角色。如果有角色,则返回名称,如果没有,则返回 nil。

    【讨论】:

    • 感谢 Shadwell,您的回答已完结。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2019-12-17
    • 1970-01-01
    • 2023-01-02
    • 2017-07-29
    • 2011-02-12
    相关资源
    最近更新 更多