2012-01-05 99 views
3

在Rails3应用程序中,我有一些与user_id模型 - 这种方式我说:它是由一些用户创建的。通过ID检查用户权限的最佳方法是什么?

像:

current_user.id #=> 1 
@item.user_id #=> 1 
# this item created by user with id 1 

,我想CURRENT_USER的接取限制这不是由他创建的/她的物品。

喜欢的东西:

if @item.user_id == current_user.id 
    #everything is fine 
else 
    #redirect somwhere with flash "You don't have an access here" 
end 

什么是最好的办法,因为我有这样的USER_ID的车型倍数(和控制器来显示/编辑/销毁)?

回答

4

使用CanCan

有了它,你将能够以声明的方式定义权限,就像这样:

can :read, Project, :user_id => user.id 

后来执行这个规则:

def show 
    @project = Project.find(params[:id]) 
    authorize! :read, @project 
end 

authorize!将引发异常,但你可以在检查更和平的方式:

<%= link_to 'Link to a project', @project if can? :read, @project %> 

你可以拦截授权错误并在一个地方处理它们:

class ApplicationController < ActionController::Base 
    rescue_from CanCan::AccessDenied do |exception| 
    redirect_to root_url, :alert => exception.message 
    end 
end 
0

最简单的方法是使用Active Record的has_many

也就是说,在一个控制器,只要您加载Item,你刚才说

@item = current_user.items.find(params[:id]) 

这样你就不必做任何工作进行检查。

相关问题