Class: Anoubis::Sso::Client::User

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/anoubis/sso/client/user.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#localeObject

Returns the value of attribute locale.



9
10
11
# File 'app/models/anoubis/sso/client/user.rb', line 9

def locale
  @locale
end

Returns the value of attribute menus.



12
13
14
# File 'app/models/anoubis/sso/client/user.rb', line 12

def menus
  @menus
end

#nameObject

Returns the value of attribute name.



7
8
9
# File 'app/models/anoubis/sso/client/user.rb', line 7

def name
  @name
end

#surnameObject

Returns the value of attribute surname.



8
9
10
# File 'app/models/anoubis/sso/client/user.rb', line 8

def surname
  @surname
end

#timeoutObject

Returns the value of attribute timeout.



10
11
12
# File 'app/models/anoubis/sso/client/user.rb', line 10

def timeout
  @timeout
end

#timezoneObject

Returns the value of attribute timezone.



11
12
13
# File 'app/models/anoubis/sso/client/user.rb', line 11

def timezone
  @timezone
end

Class Method Details

.load_cache(redis, uuid) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/anoubis/sso/client/user.rb', line 29

def self.load_cache(redis, uuid)
  begin
    data = JSON.parse redis.get(User.redis_prefix + 'user:' + uuid), { symbolize_names: true }
  rescue
    data = nil
  end

  unless data
    user = self.where(uuid: uuid).first
    if user
      return JSON.parse(user.to_json(except: [:password_digest]), { symbolize_names: true })
    end
  end

  data
end

Instance Method Details

#after_destroy_anubis_sso_client_userObject



61
62
63
# File 'app/models/anoubis/sso/client/user.rb', line 61

def after_destroy_anubis_sso_client_user
  self.clear_cache
end

#after_save_anubis_sso_client_userObject



57
58
59
# File 'app/models/anoubis/sso/client/user.rb', line 57

def after_save_anubis_sso_client_user
  self.clear_cache
end

#attributesObject



46
47
48
49
50
51
52
53
54
55
# File 'app/models/anoubis/sso/client/user.rb', line 46

def attributes
  super.merge({
    name: self.name,
    surname: self.surname,
    locale: self.locale,
    timeout: self.timeout,
    timezone: self.timezone,
    menus: self.get_menus
  })
end

#clear_cacheObject



25
26
27
# File 'app/models/anoubis/sso/client/user.rb', line 25

def clear_cache
  self.redis.del(self.redis_prefix + 'user:' + self.uuid) if self.redis
end

#get_menusObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/models/anoubis/sso/client/user.rb', line 65

def get_menus
  self.menus = {}
  access = Anoubis::Sso::Client::GroupMenu.accesses[:read].to_s+','+Anoubis::Sso::Client::GroupMenu.accesses[:write].to_s
  query = <<-SQL
        SELECT `menus`.`id`, `menus`.`mode`, MAX(`group_menus`.`access`) AS `access`
        FROM (`menus`, `group_menus`, `groups`, `user_groups`)
        WHERE `menus`.`status` = 0 AND `menus`.`id` = `group_menus`.`menu_id` AND `group_menus`.`access` IN (#{access}) AND `group_menus`.`group_id` = `groups`.`id` AND
          `groups`.`id` = `user_groups`.`group_id` AND `user_groups`.`user_id` = #{self.id} 
        GROUP BY `menus`.`id`, `menus`.`mode`
  SQL
  Anoubis::Sso::Client::GroupMenu.find_by_sql(query).each do |data|
    self.menus[data[:mode]] = data.access
  end

  self.menus
end

#save_cache(sso_data) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'app/models/anoubis/sso/client/user.rb', line 14

def save_cache(sso_data)
  if sso_data
    self.name = sso_data[:name] if sso_data.key? :name
    self.surname = sso_data[:surname] if sso_data.key? :surname
    self.locale = sso_data[:locale] if sso_data.key? :locale
    self.timeout = sso_data[:timeout] if sso_data.key? :timeout
    self.timezone = sso_data[:timezone] if sso_data.key? :timezone
  end
  self.redis.set(self.redis_prefix + 'user:' + self.uuid, self.to_json) if self.redis
end