2

场景是这样的:

我的网站上有一些用户。一个用户有一个角色,这里的相关角色是adminand normal。我也有一个模型,我们称之为SomeModel

我为该站点创建了一个后端,它使用管理布局。所有管理员都拥有编辑任何内容的完全权限。

这种关系出现了问题:User -> owns -> SomeModel。这意味着非管理员 用户可以拥有一个实例SomeModel并且应该能够编辑该实例的数据。

控制器SomeModel有一个编辑操作,然后迎合管理员和普通用户。

但是,我不希望普通用户看到管理布局,现在,我这样做的方式是这样的:

if current_user.admin?
  render :layout => 'admin'
end

如果用户不是管理员,则默认为标准布局。我在我所有的行动中都有这一点,SomeModel而且它看起来不像是一种非常 Rails 的做事方式。

有没有更好的办法?

4

1 回答 1

4

您可以在控制器级别执行此操作:

  class MyModelController < ActionController::Base
    layout :user_or_admin_layout

    def index
      # fetching objects
    end

    private
      def user_or_admin_layout
        current_user.admin? ? "admin_layout" : "user_layout"
      end
  end

rails 文档中有更多关于布局的示例

于 2010-09-15T19:06:38.683 回答