将此代码示例作为Plug来处理身份验证:
defmodule Financeweb.APIAuth do
...
def call(conn, _opts) do
...
if authenticated_user do
conn
|> assign(:current_user, user)
else
conn
|> send_resp(401, "{\"error\":\"unauthorized\"}")
|> halt
end
end
end
Run Code Online (Sandbox Code Playgroud)
所以,我通过current_user下游传递变量Plug.Conn.assign/3.在Phoenix控制器中获取此变量的最佳方法是什么?我这样做(下面的代码),但我确信有更好的方法来做到这一点.
def index(conn, _) do
user_id = conn.assigns.current_user.id
end
Run Code Online (Sandbox Code Playgroud) 在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;
class PostsController < APIController
def show
current_user.posts.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
使用Ecto表达这一点的最佳方式是什么?
在Rails AR中可以运行如下查询:
current_user.articles # fetch all articles from current_user
SELECT * from articles where user_id = <user_id>;
Run Code Online (Sandbox Code Playgroud)
有一种与Ecto相同的方法吗?
我在我的rails应用程序中使用Cancan + Devise:
当我尝试更新评论记录时,问题就出现了,我想初始化方法的用户参数总是即将到来,nil即使我已记录:
Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
unless user.nil?
if user.role.name == "admin"
can :manage, :all
elsif user.role.name == "atendimento"
can :manage, Comment
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
Better_errors

最后它引发了这个错误.

每个人都面临这个问题?有人可以帮帮我吗?
Rails 3.2.8设计2.1.0 CanCan 1.6.9 Ruby 1.9.3p385
编辑1
CommentsController.rb
class CommentsController < ApplicationController
authorize_resource :only => [:index, :show,:new,:edit, :create,:update,:destroy, :approve, :moderate, :disapprove]
layout "admin"
Run Code Online (Sandbox Code Playgroud)
编辑2
嘿伙计们,CanCan在控制器收到ajax请求时工作得很好.
Comments.js
var request = $.ajax({
url: url_to_request,
type: "PUT",
data: {id : id_to_send, …Run Code Online (Sandbox Code Playgroud)