我从一周开始就有bigs询问。我有三种不同类型的用户:
- 管理员
- 编辑器(需要管理员验证才能在上写入或创建数据库)
- 简单用户(具有评论、添加收藏夹等基本功能)
目前我只是在安装宝石装置(这很神奇)
那么,对你来说,用不同的特权为我的不同用户做最好的实践是什么?简单布尔值(用户、管理员、编辑器)?例如,我需要用user_id为Editor指定一个特定的帖子?你认识一个能帮助你做到这一点的宝石吗?你认为有可能做一个管理验证系统来注入数据库吗?我如何为编辑职位制作待定列表?
当然,这是很多愚蠢的问题,但我此刻迷路了,所以如果你能帮助我,请:)
感谢
因为这是一个没有代码示例的通用问题,所以在开始解决这个问题时,我将建议一种通用方法。
你需要的是cancancan宝石:
github.com/CanCanCommunity/cancan.
gem提供了可以在rails框架中轻松使用的"授权"框架和功能。
最初的宝石cancan也是由瑞安·贝茨写的。这是一个很好的视频来解释它:
railscasts.com/epicodes/192-授权-带扫描
此外,如果你是rails的初学者,我建议你在不了解"设计魔法"的工作原理的情况下不要使用它。一个好的开始是从头开始尝试身份验证,正如Ryan bates在这里简单地解释的那样:
railscasts.com/epicodes/250-身份验证-从scatch
这将使理解cancancan变得更容易。
我觉得cancan有点头疼,更喜欢使用多态关联。
用户是你的顶级模型与的"档案"
- 管理员
- 编辑器
- 简单用户
您的用户模型可以包含一个名为"profile_id"one_answers"profile_type"的字段
例如:
class User < ActiveRecord::Base
belongs_to :profile, polymorphic: true
end
class Admin < ActiveRecord::Base
has_one :user, as: :profile, dependent: :destroy
end
当不同的"概要文件"有不同的数据库字段时,这也很好。您也可以只使用单表继承。
编辑:
在您的用户模型中:
def admin?
self.profile_type.downcase == "admin"
end
那么您可以使用helper current_user.admin吗?
其余类型也可以这样做。