【问题标题】:Setting permissions at the route level?在路由级别设置权限?
【发布时间】:2013-01-13 21:27:51
【问题描述】:

我是 Rails 新手,我正在使用设计进行身份验证。

我有一个名为/users/5/events/1/add_images 的路由,current_user 只有在@user == current_user 时才能访问该路由。设置此权限的最佳方法是什么?这应该在控制器级别完成吗?

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-3.2


    【解决方案1】:

    是的,应该在控制器级别完成。

    您可以使用cancan gem 来处理授权。

    https://github.com/ryanb/cancan

    http://railscasts.com/episodes/192-authorization-with-cancan

    粗略地说,你必须定义能力:

    can :add_images, Event do |event|
        event.user.id == user.id
    end
    

    在 events_controller 中,添加一个 before_filter

    before_filter :find_event # set @event
    before_filter :authorize_add_images, only: :add_images
    
    def authorize_add_images
        authorize! :add_images, @event
    end
    

    这是大体思路,其余部分请阅读文档。

    【讨论】:

    • 特别是@user 和 current_user) 在路由级别不存在
    • 是的,我意识到传入的用户已经是 current_user
    猜你喜欢
    • 2015-06-22
    • 2012-02-29
    • 1970-01-01
    • 2016-11-22
    • 2018-11-29
    • 1970-01-01
    • 2014-12-20
    • 2021-01-14
    • 2012-09-28
    相关资源
    最近更新 更多