构建API服务器2

1. 实现unauthenticated!方法

class Api::V1::BaseController < ApplicationController
+ def unauthenticated!
+   api_error(status: 401)
+ end
end

2. 增加授权

+gem 'pundit'
$ bundle install

修改app/controllers/api/v1/base_controller.rb

class Api::V1::BaseController < ApplicationController
 + include Pundit
end
$ rails g pundit:install
create app/policies/application_policy.rb

将policies目录放到rails的自动加载路径中:
修改config/application.rb

module BuildAnApiRailsDemo
 class Application < Rails::Application
+ config.autoload_paths << Rails.root.join('app/policies')
 end
end

创建和user相关的权限机制

$ rails g pundit:policy user

修改app/policies/user_policy.rb

class UserPolicy < ApplicationPolicy
 def show?
   return true
 end

 def create?
   return true
 end

 def update?
   return true if user.admin?
   return true if record.id == user.id
 end

 def destroy?
   return true if user.admin?
   return true if record.id == user.id
 end

 class Scope < ApplicationPolicy::Scope
   def resolve
     scope
   end
 end
end

使用UserPolicy
修改app/controller/api/users_controller.rb

class Api::V1::UsersController < Api::V1::BaseController
 def update
 @user = User.find(params[:id])
+  return api_error(status: 403) if !UserPolicy.new(current_user, @user).update?
   @user.update_attributes(update_params)
 end
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Awesome Ruby Toolbox Awesome A collection of awesome Ruby...
    debbbbie阅读 8,020评论 0 3
  • 本文来源于ruby-chinahttps://ruby-china.org/topics/25822 1. 新建项...
    yaya_pangdun阅读 5,110评论 0 1
  • 对自己进入全栈工程师进行一个记录。 前期配置 rails new rails101git initgit add ...
    阿轲666阅读 3,579评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,387评论 4 61
  • 瓷的声音落进巷口 在夜色里摔倒出轨的影子 月亮在时光里盘点,谁的心思 是瓷的裂痕里不眠的水 在过往的琴声里求赎 你...
    道一上人阅读 3,496评论 28 28

友情链接更多精彩内容