lato_core 1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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