Ruby on rails 在过滤器之前为控制器破解一个管理函数

Ruby on rails 在过滤器之前为控制器破解一个管理函数,ruby-on-rails,ruby,controller,authorization,Ruby On Rails,Ruby,Controller,Authorization,我使用Authologic和一些书面方法来管理用户以及他们在我的应用程序中可以做什么。我真的不需要有多重角色的能力,我只需要有摧毁事物的能力。我想知道我是否能一起解决这个问题 在我的“QuestionsController”中,我使用以下过滤器: before_filter :require_user, :only => [:edit, :update, :destroy] # all actions require user to be logged in before_fil

我使用Authologic和一些书面方法来管理用户以及他们在我的应用程序中可以做什么。我真的不需要有多重角色的能力,我只需要有摧毁事物的能力。我想知道我是否能一起解决这个问题

在我的“QuestionsController”中,我使用以下过滤器:

  before_filter :require_user, :only => [:edit, :update, :destroy]  # all actions require user to be logged in
  before_filter :init_data     # create a member variable called @post, initialized based on the action
  before_filter :require_owner, :only => [:edit, :update, :destroy] #edit, update, and destroy actions require ownership
我试图找出是否可以用一个条件包装这些过滤器,该条件指定当前用户的用户名是否为“bgadoci”,然后不执行过滤器。这可能吗?如果可能的话,我应该使用什么语法(对ruby和rails来说有点陌生)

这里是我现在看到的,它在第一行给出了一个语法错误(很明显)


也许你可以做一个前过滤器来包装其他过滤器

before_filter :check_for_me


def check_for_me
  unless current_user.username == 'me'
    before_filter :require_user
    ..
  end
end

实际上,如果你直接访问一个URL,比如localhost:3000/questions/edit/1,这似乎打开了所有的窗口。所以我想那没用。有什么想法吗?如果我将require_owner方法包装在应用程序控制器中(减去def check_for_me部分),这实际上是有效的。这是一个可怕的答案。Before filter在类(而不是实例)级别设置筛选器。在开发中,这不会引起注意,因为每次加载页面时都会重新加载该类。然而,在生产中,一旦一个不是“你”的用户点击页面,过滤器将为每个人启用。您真正想要的是在\u filter:require\u user,:if=>:name\u of \u func\u为您返回\u false\u之前,然后在控制器上放置另一个函数。
before_filter :check_for_me


def check_for_me
  unless current_user.username == 'me'
    before_filter :require_user
    ..
  end
end