lato_core 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +38 -0
  3. data/app/controllers/lato_core/api/v1/api_controller.rb +9 -0
  4. data/app/controllers/lato_core/application_controller.rb +6 -0
  5. data/app/controllers/lato_core/back/authentication_controller.rb +114 -0
  6. data/app/controllers/lato_core/back/back_controller.rb +28 -0
  7. data/app/controllers/lato_core/back/superusers_controller.rb +172 -0
  8. data/app/mailers/lato_core/application_mailer.rb +10 -0
  9. data/app/mailers/lato_core/superusers_mailer.rb +29 -0
  10. data/app/models/lato_core/superuser.rb +43 -0
  11. data/app/views/lato_core/back/authentication/login.html.erb +42 -0
  12. data/app/views/lato_core/back/authentication/password_edit.html.erb +50 -0
  13. data/app/views/lato_core/back/authentication/password_forget.html.erb +37 -0
  14. data/app/views/lato_core/back/back/home.html.erb +20 -0
  15. data/app/views/lato_core/back/superusers/edit.html.erb +12 -0
  16. data/app/views/lato_core/back/superusers/index.html.erb +25 -0
  17. data/app/views/lato_core/back/superusers/new.html.erb +12 -0
  18. data/app/views/lato_core/back/superusers/shared/_form.html.erb +71 -0
  19. data/app/views/lato_core/back/superusers/show.html.erb +1 -0
  20. data/app/views/lato_core/mailers/layouts/mailer.html.erb +9 -0
  21. data/app/views/lato_core/mailers/layouts/mailer.text.erb +1 -0
  22. data/app/views/lato_core/mailers/superusers/notify.html.erb +2 -0
  23. data/app/views/lato_core/mailers/superusers/recover_password.html.erb +4 -0
  24. data/config/config.yml +8 -0
  25. data/config/example.yml +66 -0
  26. data/config/initializers/init.rb +16 -0
  27. data/config/initializers/ram.rb +50 -0
  28. data/config/routes.rb +20 -0
  29. data/db/migrate/20160224181217_create_lato_core_superusers.rb +15 -0
  30. data/lib/lato_core.rb +11 -0
  31. data/lib/lato_core/engine.rb +26 -0
  32. data/lib/lato_core/interface.rb +29 -0
  33. data/lib/lato_core/interface/authentication.rb +34 -0
  34. data/lib/lato_core/interface/cache.rb +29 -0
  35. data/lib/lato_core/interface/communication.rb +104 -0
  36. data/lib/lato_core/interface/languages.rb +60 -0
  37. data/lib/lato_core/interface/navigation.rb +109 -0
  38. data/lib/lato_core/interface/session.rb +71 -0
  39. data/lib/lato_core/interface/superusers.rb +143 -0
  40. data/lib/tasks/lato_core_tasks.rake +11 -0
  41. data/test/controllers/lato_core/api/v1/api_controller_test.rb +9 -0
  42. data/test/controllers/lato_core/application_controller_test.rb +9 -0
  43. data/test/controllers/lato_core/back/authentication_controller_test.rb +13 -0
  44. data/test/controllers/lato_core/back/back_controller_test.rb +9 -0
  45. data/test/controllers/lato_core/back/session_controller_test.rb +13 -0
  46. data/test/controllers/lato_core/back/superusers_controller_test.rb +13 -0
  47. data/test/dummy/README.rdoc +28 -0
  48. data/test/dummy/Rakefile +6 -0
  49. data/test/dummy/app/assets/javascripts/application.js +13 -0
  50. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  51. data/test/dummy/app/controllers/application_controller.rb +5 -0
  52. data/test/dummy/app/helpers/application_helper.rb +2 -0
  53. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  54. data/test/dummy/bin/bundle +3 -0
  55. data/test/dummy/bin/rails +4 -0
  56. data/test/dummy/bin/rake +4 -0
  57. data/test/dummy/bin/setup +29 -0
  58. data/test/dummy/config.ru +4 -0
  59. data/test/dummy/config/application.rb +25 -0
  60. data/test/dummy/config/boot.rb +5 -0
  61. data/test/dummy/config/database.yml +25 -0
  62. data/test/dummy/config/environment.rb +5 -0
  63. data/test/dummy/config/environments/development.rb +41 -0
  64. data/test/dummy/config/environments/production.rb +79 -0
  65. data/test/dummy/config/environments/test.rb +42 -0
  66. data/test/dummy/config/initializers/assets.rb +11 -0
  67. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  68. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  69. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  70. data/test/dummy/config/initializers/inflections.rb +16 -0
  71. data/test/dummy/config/initializers/mime_types.rb +4 -0
  72. data/test/dummy/config/initializers/session_store.rb +3 -0
  73. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  74. data/test/dummy/config/locales/en.yml +23 -0
  75. data/test/dummy/config/routes.rb +4 -0
  76. data/test/dummy/config/secrets.yml +22 -0
  77. data/test/dummy/log/test.log +0 -0
  78. data/test/dummy/public/404.html +67 -0
  79. data/test/dummy/public/422.html +67 -0
  80. data/test/dummy/public/500.html +66 -0
  81. data/test/dummy/public/favicon.ico +0 -0
  82. data/test/fixtures/lato_core/superusers.yml +11 -0
  83. data/test/integration/navigation_test.rb +8 -0
  84. data/test/lato_core_test.rb +7 -0
  85. data/test/mailers/lato_core/lato_core_mailer_test.rb +9 -0
  86. data/test/mailers/previews/lato_core/lato_core_mailer_preview.rb +6 -0
  87. data/test/models/lato_core/superuser_test.rb +9 -0
  88. data/test/test_helper.rb +21 -0
  89. metadata +207 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6cb92d3b3c9b544994b4a3d1b0c29867ae4c9b52
4
+ data.tar.gz: 8bd48730a7264e0574ae614f83bccacfde7f4b96
5
+ SHA512:
6
+ metadata.gz: 36e9ec71600ea4de301286f49a40729525c8851e90f493125177b4b584a89a6a094a94d1b27e941771bebcae74ef7418ae52e0feb3e5949c4356a0c6a1a78eed
7
+ data.tar.gz: 1080153b8ad42ac9ffcdcfbf975835c4c75a3bace55b0a299f2aade157cbc39cd1007aa9a237fa5174023929463aa3291495509ef1c2e5ba47df44294ac5e654
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'doc'
11
+ rdoc.title = 'LatoCore'
12
+ rdoc.rdoc_files.include('README.md')
13
+ rdoc.rdoc_files.include('lib/lato_core.rb')
14
+ rdoc.rdoc_files.include('lib/lato_core/**/*.rb')
15
+ rdoc.rdoc_files.include('app/models/**/*.rb')
16
+ end
17
+
18
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
19
+ load 'rails/tasks/engine.rake'
20
+
21
+
22
+ load 'rails/tasks/statistics.rake'
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task default: :test
@@ -0,0 +1,9 @@
1
+ module LatoCore
2
+ module Api::V1
3
+
4
+ # Classe che gestisce le API del modulo
5
+ class ApiController < ApplicationController
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module LatoCore
2
+ # Classe base dei controller del modulo
3
+ class ApplicationController < ActionController::Base
4
+
5
+ end
6
+ end
@@ -0,0 +1,114 @@
1
+ module LatoCore
2
+ module Back
3
+ # Controller che gestisce il login e il logout degli utenti
4
+ class AuthenticationController < Back::BackController
5
+
6
+ # Disattivo il controllo dell'autenticazione utente
7
+ skip_before_action :core_controlUser, except: [:exec_logout]
8
+
9
+ # Richiama la view della pagina di login
10
+ def login
11
+ redirect_to lato_core.root_path if core_controlSession
12
+ end
13
+
14
+ # Esegue il login e, se l'utente e' autenticato lo rimanda
15
+ # alla homepage del backoffice
16
+ def exec_login
17
+ if core_createSession(params[:username], params[:password])
18
+ redirect_to lato_core.root_path
19
+ else
20
+ flash[:warning] = CORE_LANG['superusers']['login_error']
21
+ redirect_to lato_core.login_path
22
+ end
23
+ end
24
+
25
+ # Esegue il logout e rimanda alla pagina di login del backoffice
26
+ def exec_logout
27
+ core_destroySession
28
+ redirect_to lato_core.login_path
29
+ end
30
+
31
+ # Richiama la view per la richiesta di una nuova password nel caso di
32
+ # password dimenticata
33
+ def password_forget
34
+ redirect_to lato_core.root_path unless core_getRecoveryPasswordPermission
35
+ redirect_to lato_core.root_path if core_controlSession
36
+ end
37
+
38
+ # Esegue il necessario per il recupero password e invia l'email al richiedente
39
+ def password_recover
40
+ redirect_to lato_core.root_path unless core_getRecoveryPasswordPermission
41
+ if user = LatoCore::Superuser.find_by(email: params[:email].downcase)
42
+ # genero il codice da salvare come session code
43
+ code = "RECPSW-#{SecureRandom.urlsafe_base64}"
44
+ # genero il codice per formare l'url di recupero password
45
+ code_url = URI.encode("#{user.id}::#{Time.now}::#{code}")
46
+ # memorizzo il session_code sul db
47
+ user.update_attribute(:session_code, code)
48
+ # invio una mail di recupero
49
+ LatoCore::SuperusersMailer.recover_password(user.email, code_url).deliver_now
50
+ flash[:success] = CORE_LANG['recover_password']['confirm_send']
51
+ else
52
+ flash[:warning] = CORE_LANG['superusers']['not_found']
53
+ end
54
+ redirect_to lato_core.login_path
55
+ end
56
+
57
+ # Richiama la view con il form per l'inserimento di una nuova password
58
+ def password_edit
59
+ redirect_to lato_core.root_path unless core_getRecoveryPasswordPermission
60
+ redirect_to lato_core.root_path if core_controlSession
61
+ # splitto il token ricevuto (formato: id utente, timestamp, session_code)
62
+ data = URI.decode(params[:token]).split('::')
63
+ # controllo che il formato sia corretto
64
+ if data.length != 3
65
+ flash[:warning] = CORE_LANG['recover_password']['recover_error_token']
66
+ redirect_to lato_core.login_path and return false
67
+ end
68
+ # identifico i singoli dati
69
+ user_id = data.first
70
+ timestamp = data.second
71
+ session_code = data.last
72
+ # cerco l'utente e, se non esiste, stampo un errore
73
+ @user = LatoCore::Superuser.find(user_id)
74
+ if !@user
75
+ flash[:warning] = CORE_LANG['recover_password']['recover_error_user']
76
+ redirect_to lato_core.login_path and return false
77
+ end
78
+ # verifico che il token sia ancora valido e non abbia superato le 24 ore
79
+ if !time = timestamp.to_time || time < Time.now - 24.hours
80
+ flash[:warning] = CORE_LANG['recover_password']['recover_error_token_time']
81
+ redirect_to lato_core.login_path and return false
82
+ end
83
+ # verifico che il session_code del token sia corretto
84
+ if @user.session_code != session_code
85
+ flash[:warning] = CORE_LANG['recover_password']['recover_error_token']
86
+ redirect_to lato_core.login_path and return false
87
+ end
88
+ # genero un nuovo token per togliere la validita' al link di recupero password
89
+ # e lo memorizzo all'utente
90
+ new_code = SecureRandom.urlsafe_base64
91
+ @user.update_attribute(:session_code, new_code)
92
+ end
93
+
94
+ # Aggiorna la password dell'utente che ha richiesto il recupero password
95
+ def password_update
96
+ redirect_to lato_core.root_path unless core_getRecoveryPasswordPermission
97
+ user = LatoCore::Superuser.find(params[:id])
98
+ if !user || user.session_code != params[:token]
99
+ flash[:warning] = CORE_LANG['recover_password']['recover_error']
100
+ redirect_to lato_core.login_path and return false
101
+ end
102
+ user.update(password: params[:password], password_confirmation: params[:password])
103
+ if !user.save
104
+ flash[:warning] = CORE_LANG['recover_password']['recover_error']
105
+ redirect_to lato_core.login_path and return false
106
+ end
107
+
108
+ flash[:success] = CORE_LANG['recover_password']['recover_success']
109
+ redirect_to lato_core.login_path
110
+ end
111
+
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,28 @@
1
+ # Includo l'interfaccia di lato_core
2
+ include LatoCore::Interface
3
+ # Includo l'interfaccia di lato_view
4
+ include LatoView::Interface
5
+
6
+ module LatoCore
7
+ module Back
8
+ # Classe che gestisce il pannello di backoffice del modulo
9
+ class BackController < ApplicationController
10
+
11
+ # Imposto layout di base dal lato_view
12
+ layout 'lato_layout'
13
+
14
+ # Attivo il controllo delle credenziali
15
+ before_action :core_controlUser
16
+
17
+ # Richiama la view della home del pannello di backoffice
18
+ def home
19
+ # rimando ad una pagina custom se è stato impostato da file di configurazione
20
+ if login_root = core_getApplicationLoginRoot and login_root
21
+ redirect_to login_root
22
+ end
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,172 @@
1
+ module LatoCore
2
+ module Back
3
+ # Controller che gestisce il CRUD degli utenti amministratori
4
+ class SuperusersController < Back::BackController
5
+
6
+ # Imposto la voce di menu da attivare
7
+ before_action :set_unique_name
8
+ # Controllo permessi utente
9
+ before_action :control_permission
10
+
11
+ # Richiama la view di creazione di un nuovo utente con permessi di
12
+ # accesso al pannello di backoffice
13
+ def new
14
+ @superuser = LatoCore::Superuser.new
15
+ end
16
+
17
+ # Crea un nuovo utente con permessi di accesso al pannello di backoffice
18
+ # e rimanda alla pagina di visualizzazione del profilo utente appena
19
+ # creato
20
+ def create
21
+ superuser = LatoCore::Superuser.new(superuser_params)
22
+ # controllo che l'utente creato non abbia permessi superiori dell'utente
23
+ # creatore
24
+ if superuser.permission > core_getCurrentUser.permission
25
+ flash[:warning] = CORE_LANG['superusers']['permission_create']
26
+ redirect_to lato_core.superusers_path and return false
27
+ end
28
+ # controllo che la creazione dell'utente non abbia avuto errori
29
+ unless superuser.save
30
+ flash[:danger] = CORE_LANG['superusers']['failed_create']
31
+ redirect_to lato_core.superusers_path and return false
32
+ end
33
+
34
+ flash[:success] = CORE_LANG['superusers']['success_create']
35
+ redirect_to lato_core.superuser_path(superuser)
36
+ end
37
+
38
+ # Richiama la view di modifica dell'utente con id uguale a quello ricevuto
39
+ # come parametro
40
+ def edit
41
+ @superuser = LatoCore::Superuser.find(params[:id])
42
+ # controllo che l'utente da modificare esista
43
+ unless @superuser
44
+ flash[:warning] = CORE_LANG['superusers']['not_found']
45
+ redirect_to lato_core.superusers_path and return false
46
+ end
47
+ # controllo che l'utente da modificare non abbia permessi uguali o
48
+ # maggiori dell'utente modificatore
49
+ if @superuser.permission >= core_getCurrentUser.permission &&
50
+ @superuser.permission != core_getCurrentUser.permission
51
+ flash[:warning] = CORE_LANG['superusers']['permission_update']
52
+ redirect_to lato_core.superusers_path and return false
53
+ end
54
+ end
55
+
56
+ # Aggiorna l'utente con i dati ricevuti come parametro
57
+ def update
58
+ superuser = LatoCore::Superuser.find(params[:id])
59
+ # controllo che l'utente da modificare esista
60
+ unless superuser
61
+ flash[:warning] = CORE_LANG['superusers']['not_found']
62
+ redirect_to lato_core.superusers_path and return false
63
+ end
64
+ # controllo che l'utente da modificare non abbia permessi uguali o
65
+ # maggiori dell'utente modificatore
66
+ if superuser.permission >= core_getCurrentUser.permission &&
67
+ superuser != core_getCurrentUser
68
+ flash[:warning] = CORE_LANG['superusers']['permission_update']
69
+ redirect_to lato_core.superusers_path and return false
70
+ end
71
+ # controllo che l'utente non si stia auto aumentando i permessi
72
+ if superuser.id === core_getCurrentUser.id &&
73
+ superuser.permission < params[:superuser][:permission].to_i
74
+ flash[:warning] = CORE_LANG['superusers']['level_update']
75
+ redirect_to lato_core.superusers_path and return false
76
+ end
77
+ # faccio in modo che l'aggiornamento avvenga senza problemi anche se
78
+ # la password non e' stata inserita
79
+ if params[:superuser][:password].blank? &&
80
+ params[:superuser][:password_confirmation].blank?
81
+ params[:superuser].delete(:password)
82
+ params[:superuser].delete(:password_confirmation)
83
+ end
84
+ # controllo che non ci siano stati errori di aggiornamento
85
+ unless superuser.update(superuser_params)
86
+ flash[:danger] = CORE_LANG['superusers']['failed_update']
87
+ redirect_to lato_core.superuser_path(superuser) and return false
88
+ end
89
+
90
+ flash[:success] = CORE_LANG['superusers']['success_update']
91
+ redirect_to lato_core.superuser_path(superuser)
92
+ end
93
+
94
+ # Elimina l'utente con id ricevuto come parametro
95
+ def destroy
96
+ superuser = LatoCore::Superuser.find(params[:id])
97
+ # controllo che l'utente da eliminare esista
98
+ unless superuser
99
+ flash[:warning] = CORE_LANG['superusers']['not_found']
100
+ redirect_to lato_core.superusers_path and return false
101
+ end
102
+ # controllo che l'utente non stia provando a eliminare se stesso
103
+ if superuser === core_getCurrentUser
104
+ flash[:warning] = CORE_LANG['superusers']['itself_destroy']
105
+ redirect_to lato_core.superusers_path and return false
106
+ end
107
+ # controllo che l'utente da eliminare non abbia permessi maggiori o
108
+ # uguali all'utente eliminatore
109
+ if superuser.permission >= core_getCurrentUser.permission
110
+ flash[:warning] = CORE_LANG['superusers']['permission_destroy']
111
+ redirect_to lato_core.superusers_path and return false
112
+ end
113
+ # controllo che non ci siano stati errori durante l'eliminazione
114
+ unless superuser.destroy
115
+ flash[:danger] = CORE_LANG['superusers']['failed_destroy']
116
+ redirect_to lato_core.superuser_path(superuser) and return false
117
+ end
118
+
119
+ flash[:success] = CORE_LANG['superusers']['success_destroy']
120
+ redirect_to lato_core.superusers_path
121
+ end
122
+
123
+ # Richiama la view per la visualizzazione di un singolo utente
124
+ # con lo stesso id ricevuto come parametro
125
+ def show
126
+ @superuser = LatoCore::Superuser.find(params[:id])
127
+ # controllo che l'utente da mostrare sia esistente
128
+ redirect_to lato_core.superusers_path unless @superuser
129
+ end
130
+
131
+ # Richiama la view per la visualizzazione di tutti gli utenti
132
+ # del sistema
133
+ def index
134
+ @search_superusers = LatoCore::Superuser.ransack(params[:q])
135
+ # controllo che non vengano mostrati gli utenti impostati nascosti
136
+ hide_settings = core_getHideUsersSettings
137
+ if hide_settings && !hide_settings.blank?
138
+ permissions_not_accepted = []
139
+ current_user_permission = core_getCurrentUser.permission
140
+ hide_settings.each do |setting|
141
+ permissions_not_accepted.push(setting.first) if setting.last.to_i === current_user_permission
142
+ end
143
+ @superusers = @search_superusers.result.where.not(permission: permissions_not_accepted)
144
+ else
145
+ @superusers = @search_superusers.result
146
+ end
147
+ @superusers = @superusers.order(
148
+ 'username ASC'
149
+ ).paginate(page: params[:page], per_page: 10)
150
+ end
151
+
152
+ # Definisce i parametri accettati per le azioni di aggiornamento della
153
+ # tabella superusers nel database
154
+ private def superuser_params
155
+ params.require(:superuser).permit(:name, :username, :email, :permission,
156
+ :password, :password_digest)
157
+ end
158
+
159
+ # Imposta la voce della navbar degli utenti come attiva
160
+ private def set_unique_name
161
+ view_setCurrentVoice('core_superusers')
162
+ end
163
+
164
+ # Controlla che l'utente abbia i permessi per accedere alla sezione
165
+ private def control_permission
166
+ redirect_to lato_core.root_path unless core_controlPermission(6)
167
+ end
168
+
169
+ end
170
+
171
+ end
172
+ end
@@ -0,0 +1,10 @@
1
+ # Includo l'interfaccia di lato_core
2
+ include LatoCore::Interface
3
+
4
+ module LatoCore
5
+ # Classe base di gestione dei mailers
6
+ class ApplicationMailer < ActionMailer::Base
7
+ default from: core_getApplicationServiceEmail
8
+ layout 'lato_core/mailers/layouts/mailer'
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ module LatoCore
2
+ # Mailer utilizzato per la comunicazione con l'utente amministratore tramite email
3
+ class SuperusersMailer < ApplicationMailer
4
+
5
+ # Prende in input un utente, un titolo e un testo per notificare l'utente
6
+ # con il messaggio richiesto
7
+ def notify(user, title, message)
8
+ # imposto i dati come variabili di classe
9
+ @title = title
10
+ @message = message
11
+ # definisco oggetto email
12
+ subject = "#{CORE_LANG['mailers']['notify_subject']} #{core_getApplicationName}"
13
+ # invio l'email di notifica all'utente
14
+ mail(to: user.email, subject: subject,
15
+ template_path: 'lato_core/mailers/superusers')
16
+ end
17
+
18
+ # Prende in input un utente e un codice speciale.
19
+ # Invia all'utente l'email per il recupero password contenente il codice speciale
20
+ def recover_password(email, code_url)
21
+ # identifico codice completo per l'utente
22
+ @recover_url = core_getApplicationURL + lato_core.password_edit_path(code_url)
23
+ # invio l'email all'utente
24
+ mail(to: email, subject: CORE_LANG['recover_password']['email_subject'],
25
+ template_path: 'lato_core/mailers/superusers')
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,43 @@
1
+ module LatoCore
2
+ # Modello che si riferisce agli utenti con accesso al pannello di amministrazione
3
+ class Superuser < ActiveRecord::Base
4
+
5
+ # Lista validazioni
6
+ validates :name, presence: true, length: { maximum: 50 }
7
+
8
+ validates :username, presence: true,
9
+ length: { maximum: 50 },
10
+ uniqueness: { case_sensitive: false }
11
+
12
+ validates :email, presence: true,
13
+ length: { maximum: 255 },
14
+ format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i },
15
+ uniqueness: { case_sensitive: false }
16
+
17
+ validates :permission, presence: true,
18
+ length: { minimum: 1, maximum: 10 }
19
+
20
+ validates :password, presence: true,
21
+ length: { minimum: 6, maximum: 50 },
22
+ on: :create
23
+
24
+ has_secure_password
25
+
26
+ # Azioni prima del salvataggio
27
+ before_save do
28
+ username.downcase!
29
+ email.downcase!
30
+
31
+ set_admin_permission
32
+ end
33
+
34
+ # Funzione che imposta i permessi dell'utente amministratore al
35
+ # massimo livello
36
+ private def set_admin_permission
37
+ first_user = LatoCore::Superuser.first
38
+ self.permission = 10 if first_user && id === first_user.id
39
+ end
40
+
41
+ end
42
+
43
+ end