1

好的,我已经按照 github 上的 railsapps 模板说明,在 CanCan 上盲目地复制了 ryanb 的 railscast(为我的 Event 模型替换了 Comment 变量)。我已经建立了一个新用户,并为其分配了“发起人”角色,并赋予了管理员角色的一部分能力。当我在 Rails 中加载它时,我得到

未定义的方法“角色?” 对于用户:0x08 ...

好的,我正在控制台中向后工作,以重新分配新用户到“赞助商”角色并查看是否有问题。如果你在最后往下看,我看到一些东西似乎坏了,但不确定如何修复它。这是我的能力.rb

class Ability
 include CanCan::Ability

 def initialize(user)
   user ||= Us  # guest user (not logged in)
   if user.has_role? :admin
     can :manage, :all
   else
     can :read, :all
   end

   if user.role? :sponsor
     can :create, Event
     can :read, Event
     can :update, Event do |event|
       event.try(:user) == user
     end
   else
     can :read, :all
   end

 end
end

我的事件.rb:

resourcify
  belongs_to :school

一所学校has_many eventshas_and_belongs_to_many_usersbelongs_to :event。在控制台中,我使用正确的名称、school_id、电子邮件等创建了一个 new_user。这按预期工作。我然后:

user.add_role "sponsor"

这很有效,因为我可以看到用户 ID 与赞助商的角色 ID 对齐。下一步是我认为我的问题开始的地方。

ability = Ability.new(new_user)

这会产生以下结果:

SELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = 5 AND (((name = 'admin') AND(资源类型为空)

user_id 是正确的,但“名称”不是“管理员”。我认为它应该拉“赞助商”的名字?

这可能是一个简单的问题,但我猜这个错误分配可能是我问题的根源,为什么上面指出了 events#index 错误。似乎假设 Ability.new 被困在“管理员”上。我在看什么,thanx,山姆

4

1 回答 1

2

您正在使用错误的代码查询用户的角色。

user.role? :sponsor # wrong

使用 rolify 你需要这样的东西

user.has_role? :sponsor
user.has_role? :sponsor, School
user.has_role? :sponsor, School.first

尝试在没有cancan的控制台中使用简单的 rolify 命令

user.add_role :sponsor
user.has_role? :sponsor

这是很正常的,Ability.new 会产生一个具有管理员角色的选择查询,就像您拥有的一样

if user.has_role? :admin

在您的能力初始化程序中

于 2012-07-09T07:53:38.403 回答