Ruby on rails 3 Rails中的非插件角色管理

Ruby on rails 3 Rails中的非插件角色管理,ruby-on-rails-3,Ruby On Rails 3,我以前使用过CanCan,它很棒,但有时我不需要这种可定制的角色管理。有时我只需要区分管理员和其他人。所以,我通常只写一个:authenticate\u admin我需要保护的控制器和方法的方法 我发现更复杂的是确保用户只能管理他们拥有的资源。比如说,我的用户可以创建帖子,我不希望他们能够更新或破坏他们没有创建的帖子。所以,我很好奇其他人是如何以最干涸的方式处理这件事的 下面是我所做的,从我的头顶: 在应用程序控制器中: def user_can?(resource_user_id, curre

我以前使用过CanCan,它很棒,但有时我不需要这种可定制的角色管理。有时我只需要区分管理员和其他人。所以,我通常只写一个
:authenticate\u admin我需要保护的控制器和方法的方法

我发现更复杂的是确保用户只能管理他们拥有的资源。比如说,我的用户可以创建
帖子,我不希望他们能够更新或破坏他们没有创建的帖子。所以,我很好奇其他人是如何以最干涸的方式处理这件事的

下面是我所做的,从我的头顶:

在应用程序控制器中:

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]


对于一个相对简单的任务来说,似乎有很多代码。你是如何处理这项任务的?我相信有一个更优雅的解决方案——不用使用gem或插件。

我的第一个想法是提取一点点,然后通过
作为用户\u可管理的类型doodad将
方法混合到模型中。资源控制器将获得一个由当前用户管理的过滤器(我还不确定如何自动完成)<代码>是可管理的吗?
可以封装任意规则,因此它可以处理管理员标志等事情


我必须玩一玩,看看我最喜欢什么样的实现,但是像这样的解决方案似乎非常合理,而且可能是很多人会为不需要规范解决方案提供的控制级别的项目挖掘的东西

(回想起来,我不确定我是否应该把它作为一个答案,因为它的实现细节很简单。)没关系……我也在寻找更多关于实现的理论。唷;)这实际上是我这个周末要玩的东西,因为我需要类似的东西(尽管更精细),坎坦戈离开了我。。。不知所措。
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