加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

现在,你真正拥有的是两个授权上下文 – “获取用户的所有帖子”和“获取所有帖子”,你通常想为两者设置不同的权限(例如“只有管理员可以获得所有帖子”和“仅”用户自己或管理员可以获得用户的所有帖子“).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读