我有四个场景想要获得一些反馈,以便更好地了解 CanCan 如何与技能配合使用。
1 - 使用迭代中的对象可以将模型传递给 CanCan。它似乎工作正常。似乎这将从传递的对象中定义一个非常具体的能力。
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, user
2 - @user 不是在控制器中设置的变量。我假设这与 #1 相同,因为 load_and_authorize_resource 创建了 @user 实例。
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, @user
但是,当一个实例变量存在于与当前模型无关的视图中并且不是故意在控制器中设置的时候呢?例如,当 @account 实例未在 show 操作中设置时,显示用户页面内的以下内容。当 CanCan 甚至不知道它是什么时,它如何使用 @account?
link_to "view user account", account_path(1) if can? :read, @account
3 - 使用模型定义能力怎么样?我认为这是一个非常广泛的“可以编辑用户”的能力......你什么时候会使用它?
@users.each do |user|
link_to user.name, user_path(user) if can? :edit, User
4 - 使用关联。不会破坏页面...但是,我不确定它是否按预期工作。
@users.each do |user|
link_to "view user account", account_path(1) if can? :read, user.account