ruby-on-rails - 如何在 Rails 中的模型上有两个 'access levels'?

标签 ruby-on-rails ruby ruby-on-rails-3 rest activerecord

让我们假设一个简单而常见的场景。

我有一个带有 admin 字段的 User 模型。用户无法编辑他们的 admin 字段,但管理员可以编辑任何人的 admin 字段。

因此,我需要为这两种类型的用户提供适当的访问权限。

如果我以 RESTful 方式呈现它,我会有两个资源,比方说

resource :user
namespace :admin do
  resources :users
end

...问题来了 - 我如何控制 admin 字段的哪些地方可以更改,哪些地方不能更改?

  1. 我可以设置 attr_protected :admin 来防止用户更改他们的管理员状态。但是我必须在 Admin::UsersController 中用它做一个特例,比如

    @user.admin = params[:user][:admin]
    
  2. 我可以清除 UsersController 中的参数,这更糟

    params[:user].delete(:admin)
    

这两种解决方案在我看来都很困惑。处理此类情况的正确方法是什么?

如果有超过 2 个访问级别怎么办?

最佳答案

子类化怎么样?也许尝试这样的事情:

class User < ActiveRecord::Base
    attr_accessible :columns, :that, :are, :safe, :for, :users
end

class AdminUser < User
    attr_accessible :admin
end

然后在每个 Controller 中使用适当的模型。请注意,在这种情况下,在 User 类中使用 attr_protected 将不起作用,因为 AR 不会(当前)智能地应用它们,它会提示 :admin 只能在一个中。尽管如此,使用 attr_accessible 通常是更好的做法。

关于ruby-on-rails - 如何在 Rails 中的模型上有两个 'access levels'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5584182/

相关文章:

ruby-on-rails - 如何使用 ruby​​ on Rails 进行自引用?

ruby-on-rails - Rails View 渲染在数据库中获取子对象花费了太长时间

ruby-on-rails - 链接到具有特定 ID 的 Controller 索引在 Rails 中失败

ruby-on-rails - Rails 验证 NOT 在正则表达式中

javascript - MixPanel Javascript on Rails 应用程序发送到路由 '/undefined'

ruby-on-rails - 从 Rails 发送 Outlook 日历邀请

ruby-on-rails - 尝试启动 Rails 服务器时出现语法错误

ruby-on-rails - 如何在 Rails 3 的 Postgres 数据库中使用枚举?

ruby-on-rails - 如何将 Link_to 与嵌套资源一起使用

ruby-on-rails - form_for rails 4中的参数数量错误