我之前使用过CanCan,它很棒,但有时我不需要这种可定制的角色管理。有时我只需要区分管理员和其他人。所以,我通常只为我需要保护的控制器和方法写一个:authenticate_admin!
方法。Rails中的非插件角色管理
我发现有点复杂的是确保用户只能管理自己拥有的资源。说,我用户可以创建posts
,我不希望他们能够更新或销毁他们没有创建的帖子。所以,我很好奇其他人如何以最干的方式处理这个问题。
这就是我所做的,把我的头顶部:
在应用控制器:
def user_can?(resource_user_id, current_user_id)
return true if current_user.is_admin
return true if resource_user_id == current_user_id
end
然后,在有问题的控制器,我像做
before_filter :can_manage_project?, :except => [:new, :create]
和
protected
def can_manage_project?
@project = Project.find(params[:id])
return true if user_can?(@project.user_id, current_user.id)
redirect_to user_path(current_user), :flash => {:error => "Sorry, you're not allowed to do that."}
end
对于一个相对简单的任务似乎有很多代码。你怎么处理这个任务?我相信有一个更优雅的解决方案 - 使用宝石或插件。
(回想起来,我不确定我应该发布这个答案,因为它对实现细节很重要)。 –
没关系......我还在寻找更多关于实现的理论。 – Slick23
* Whew *;)这是我现在要在这个周末玩的东西,因为我需要类似的东西(虽然更加细化),而且cantango离开了我......不紧张。 –