当前位置:  开发笔记 > 编程语言 > 正文

Rails - 流量控制问题,还有更好的方法吗?

如何解决《Rails-流量控制问题,还有更好的方法吗?》经验,为你挑选了1个好方法。

我试图根据角色和"帖子"控制器锁定一些控制器,无论他们是否分配了任何权限.这似乎有效,但我想知道是否有一个干净的方法来处理这个问题.这就是我在应用程序控制器中所拥有的,我称之为前置过滤器...

if controller_name == 'users' || 'accounts'
  unless @current_user.master? || @current_user.power?
    render :template => "layouts/no_content"
  end
elsif controller_name == 'posts'
  unless @current_user.permissions.count > 0
    render :template => "layouts/no_content"
  end
end

提前致谢.



1> Alex Wayne..:

您不应该创建一个代码片段来检查控制器名称以在application.rb中执行特定操作.您应该在过滤器之前仅在需要它们的控制器中定义它

在ApplicationController中创建2个方法:

private
def require_master_or_power_user
  unless @current_user.master? || @current_user.power?
    render :template => "layouts/no_content"
  end
end

def require_some_permisions
  unless @current_user.permissions.count > 0
    render :template => "layouts/no_content"
  end
end

现在将其添加为您需要的前置过滤器:

class UsersController < ApplicationController
  before_filter :require_master_or_power_user
  ...
end

class AccountsController < ApplicationController
  before_filter :require_master_or_power_user
  ...
end

class PostsController < ApplicationController
  before_filter :require_some_permisions
  ...
end

因此ApplicationController定义了过滤器,但是它是否适用于其他控制器是否实际使用这些过滤器.像ApplicationController这样的超类应该永远不会根据其子类有条件地分支执行.选择何时使用提供的行为是您想要首先进行子类化的原因之一.

从代码可读性的角度来看,它也更加清晰.在查看UsersController时,很明显当你看到一个名为"require_something"之类的过滤器时会发生一些权限.根据您的方法,您无法通过查看用户控制器代码本身来判断这一点.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有