使用默认身份验证的Rails 3授权

时间:2011-12-12 05:34:09

标签: ruby-on-rails ruby-on-rails-3 authentication authorization

我使用用户授权处理应用。它有ListUser个类。身份验证是使用Ryan Bates http://railscasts.com/episodes/270-authentication-in-rails-3-1

构建的

我不确定授权程序。我读到了cancan gem。但我无法理解。

我想实现这个目标:

  1. 用户只能查看/编辑/删除自己的列表。
  2. 用户只能查看/编辑/删除自己的个人资料(用户类)。
  3. 我现在没有实现用户级别。没猜测或管理员。

    如何在listUser控件中使用current_user实例的before_filter方法?

2 个答案:

答案 0 :(得分:0)

由于您在应用程序控制器中定义current_user,因此这很容易。您可以在Users控制器中使用before_filter

class ItemsController < ApplicationController
  before_filter :check_if_owner, :only => [:edit, :update, :show, :destroy]

  def check_if_owner
    unless current_user.admin? # check whether the user is admin, preferably by a method in the model
      unless # check whether the current user is the owner of the item (or whether it is his account) like 'current_user.id == params[:id].to_i'
        flash[:notice] = "You dont have permission to modify this item"
        redirect_to # some path
        return
      end
    end
  end

  ###

end

你应该向UsersController添加一个类似的方法来检查它是否是他的个人资料,他正在编辑。

另外,请查看Devise,这是用于身份验证的推荐插件。

答案 1 :(得分:0)

为此,我不会使用设计。对于这种简单的用途来说,这是很重要的。

我会为公共视图创建一个单独的控制器,并始终参考current_user 请记住为PublicController

中的操作创建路由
class PublicController < ApplicationController
 before_filter :login_required?
 def list
  @list = current_user.list
 end
 def user
  @user = current_user
 end
 def user_delete
  @user = current_user
   # do your magic
 end
 def user_update
  @user = current_user
   # do your magic
 end

# and so on...
end