Rails + Devise:如何仅为用户提供某些操作?

时间:2014-07-30 09:47:36

标签: ruby-on-rails ruby authentication devise admin

由于我正在处理的应用程序不会有很多管理员,因此我已在user模型中添加了一列 admin ,以便识别相应的用户是否为管理员

在控制器中,我需要使用** before_filter:authenticate_admin!**过滤器,但只有在应用程序是模型admin时才能使用此过滤器。

如果我只使用admin的列属性而不是整个模型,如何添加此过滤器? 测试

if current_user.try(:admin?)
  # do something
end

在每个动作中都不太实用。

当使用管理帐户的列时,是否有变体的内部过滤器?

2 个答案:

答案 0 :(得分:1)

您可以创建自定义过滤器

application_controller

def authorize_admin
  if !current_user.admin?
    redirect_to(root_path, :notice => "Not Allowed") and return
  end
end

并在您的控制器中使用

before_filter :authenticate_user
before_filter :authorize_admin, :only => [:create]

答案 1 :(得分:0)

对于只有管理员可以使用的操作,您可以设置要执行的文件管理器。说 您希望以下方法的访问权限仅适用于管理员

def create_new_users
  User.create(name: "xxxx", email: "first@mail.com")
end

在application_controller中使用以下代码,该代码检查仅适用于admin的方法的访问权限。所以使用

before_filter :authenticate_user_access, :only => [:create_new_users]


def authenticate_user_access
  current_user.is_admin 
  #is_admin the attribute in the user model to check for admin.set it false by default
end

您可以在以下位置添加多个方法:仅需要管理员访问权限。