我正在尝试将 cancan 整合到我的第一个 Ruby on Rails 应用程序中。
我在开始时遇到问题......这肯定是一些基本的东西。
我的应用程序有一个项目列表,用户可能有权查看其中的任意数量,也可能没有权限。
我将此添加到我的 ProjectsController 中:
class ProjectsController < ApplicationController
load_and_authorize_resource
我的初始化方法如下所示:
def initialize(user)
user ||= User.new # guest user
puts "******** Evaluating cancan permissions for: " + user.inspect
can :read, Project do |project|
puts "******** Evaluating project permissions for: " + project.inspect
# project.try(project_users).any?{|project_user| project_user.user == user}
1 == 1 #POC test!
end
end
当我有这个时,会出现项目索引页面,但没有列出任何项目。
我在这里有2个问题:
- 由于所有项目都返回 true,因此不应该出现所有项目吗?
- 第二个 puts 语句没有写入 rails 服务器控制台,但第一个是。这是为什么???
如果我将初始化方法更改为:
def initialize(user)
user ||= User.new # guest user
puts "******** Evaluating cancan permissions for: " + user.inspect
can :read, Project
end
...我看到了所有的项目,正如我所期望的那样
如果我删除 can :read, Project 行,我会得到一个试图访问项目索引页面的安全异常......也是我所期望的。