ruby-on-rails – Rails用户访问插件
发布时间:2020-12-16 21:08:48 所属栏目:百科 来源:网络整理
导读:有很多用于处理用户权限的rails插件.我对hobo gem中的实现印象深刻,但我不确定我是否可以使用此功能而不是其他部分. GateKeeper是一个非常聪明的实现,但有一些错误,虽然它足够小我可能自己修复它. Restful_ACL为您提供了一种用于检查创建的类方法,这意味着您
有很多用于处理用户权限的rails插件.我对hobo gem中的实现印象深刻,但我不确定我是否可以使用此功能而不是其他部分. GateKeeper是一个非常聪明的实现,但有一些错误,虽然它足够小我可能自己修复它. Restful_ACL为您提供了一种用于检查创建的类方法,这意味着您无法对相关实例进行任何检查(不确定它是否具有范围查找).
我想要提供一个范围版本的ActiveRecord #find,它只能查找当前用户可以看到的内容.这应该足够强大,可以说,您只能看到您或您的朋友拥有的图库中的图片. 作为奖励,它可能会阻止您无权执行的创建或更新(在before_ *或验证步骤中),包括将您自己的记录与其他用户或图库相关联,或创建此类记录. 解决方法
您可以使用
declarative_authorization插件在模型级别上执行一些非常复杂的授权技巧.尽管如此,我自己更喜欢
rails-authorization-plugin – 用这个你定义模型级别的角色(例如某人是资源的所有者)和控制器级别的权限(例如,只有资源或管理员的所有者才能获得资源).我发现这种方法更简洁,特别是如果你正在寻求一种干净的REST方法.如果您有这样的要求:
GET /posts 你应该返回的是所有帖子,而不仅仅是当前用户的帖子. GET /users/:user_id/posts 其中:user_id设置为当前用户的id. def index user = User.find(params[:user_id]) unless params[:user_id].blank? @posts = if user # get all posts of a user user.posts.all else # get all posts Post.all end end 现在,你真正拥有的是两个授权上下文 – “获取用户的所有帖子”和“获取所有帖子”,你通常想为两者设置不同的权限(例如“只有管理员可以获得所有帖子”和“仅”用户自己或管理员可以获得用户的所有帖子“). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |