我是第一次实施CanCanCan。
但令我感到困惑的是,当我在class Foo
{
public String Name;
public Integer Id;
}
public Foo getObjId(int id) {
for (Foo foo : list) {
if (foo.getId() == id) {
return foo; // foo bar!
}
}
return null; // foo bar not found.
}
课程中设置cannot :manage, Post
时,用户仍然可以创建帖子。
Ability
我的理解是class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # if a non-signedin visitor
cannot :manage, Post
end
end
适用于所有操作,因此用户不应对:manage
资源执行任何操作。
有人可以提供建议吗?
答案 0 :(得分:1)
您是否在索引周围添加了这个内容,在您的应用中显示和编辑CRUD链接?这将删除链接所有在一起..我仍然新与cancancan但即使使用load_and_authorize_resources我仍然必须添加if if?在我的链接周围,这解决了我的问题。
<% if can? :manage, Post %>
<% link_to "something" some_path %>
<% end %>
希望这会有所帮助
答案 1 :(得分:1)
首先,您需要在Ability
类中定义每种用户类型的功能:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # if a non-signedin visitor
# abilities of user of type PUBLISHER
if user.role == "publisher"
can :create, Post
can :read, Post
can :update, Post, user_id: user.id # users can only update their own posts
# abilities of user of type ADMIN
elsif user.role == "admin"
can :manage, :all # admin can do everything
# abilities of non-users (e.g. they only can read posts)
else
cannot :manage, Post
can :read, Post
end
end
定义能力并不意味着它们是自动的 适用于控制器。
第二,您需要在每个要向其中应用定义的功能的控制器(例如“后”控制器)中包括load_and_authorize_resource
。