Rails 5:登录时缓存用户角色信息并在注销时刷新它

时间:2016-10-02 08:01:03

标签: ruby-on-rails ruby caching

我尝试实施从登录到退出的角色信息缓存。

在我的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角色在登录时缓存并在注销时删除?我想为整个用户会话缓存一次,这样我就可以随时检索信息以检查用户角色和权限。我不想在会话中存储这些信息,因为它有很多信息+不确定这是否安全。

0 个答案:

没有答案