我尝试实施从登录到退出的角色信息缓存。
在我的models / role.rb中我有这个:
class Role < ApplicationRecord
belongs_to :user, optional: true
accepts_nested_attributes_for :user
class << self
def all_cached
Rails.cache.fetch("roles") { Role.where(user_id: current_user) }
end
end
private
def flush_cache
Rails.cache.delete('roles')
end
在我的controllers / roles_controller.rb中,我有这个:
def roles
@roles = Role.all_cached
end
在我的controllers / sessions_controller.br中我有:
class SessionsController < ApplicationController
def new
render :layout => "empty"
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
flash.now[:error] = 'Invalid email/password combination!'
render 'new', :layout => "empty"
end
end
def destroy
log_out if logged_in?
redirect_to login_path
end
end
如何设置current_user角色在登录时缓存并在注销时删除?我想为整个用户会话缓存一次,这样我就可以随时检索信息以检查用户角色和权限。我不想在会话中存储这些信息,因为它有很多信息+不确定这是否安全。