我正在将现有应用程序迁移到Rails 5并使用Devise进行身份验证。数据库是Oracle12c。
我试图找出每当用户查询数据库时如何在rails连接上执行以下sql。此上下文是架构触发器正常运行所必需的,此上下文应反映执行查询的用户的用户名。
begin
main.ENV_VAR.prc_set_context_value('UserContext', '#{current_user}');
end;
是否有某种ActiveRecord挂钩可供用户查询时使用?是否有使用Devise钩子?我是否覆盖ActiveRecord :: Base?
谢谢你的帮助。
我对Oracle一无所知,所以根据有意义调整execute命令本身。这应该在你的ApplicationController
或你设计authenticate_user!
回调的任何基本控制器中,并确保在回调之后:
before_action :authenticate_user!
before_action :set_user_context
protected
def set_user_context
if current_user
ApplicationRecord.connection.execute "main.ENV_VAR.prc_set_context_value('UserContext', '#{current_user.id}')"
end
end
请注意,我也将你的current_user
切换到current_user.id
。