让我们假设一个简单而常见的场景。
我有一个带有 admin
字段的 User
模型。用户无法编辑他们的 admin
字段,但管理员可以编辑任何人的 admin
字段。
因此,我需要为这两种类型的用户提供适当的访问权限。
如果我以 RESTful 方式呈现它,我会有两个资源,比方说
resource :user
namespace :admin do
resources :users
end
...问题来了 - 我如何控制 admin
字段的哪些地方可以更改,哪些地方不能更改?
我可以设置
attr_protected :admin
来防止用户更改他们的管理员状态。但是我必须在Admin::UsersController
中用它做一个特例,比如@user.admin = params[:user][:admin]
我可以清除
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/