decidim-direct_verifications 0.17.6 → 0.17.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: baa520a6dc6b5d727bc233c5076a6dd0d042cfcd3fdd0ff4cdde46f7f1837cec
4
- data.tar.gz: 94f879f2b21bfaf542d1820c4d65c84e6769f6e32b9e06ba8930f979dcebc02a
3
+ metadata.gz: fdece320908b5c93c6b1312fae64fbb23814d8c48e99bd258cdee55dcb2b37b3
4
+ data.tar.gz: 0d70c5cf75fd68c848ce52328589cce67524197f5cc95dbcbd2ff5cc7d559ed5
5
5
  SHA512:
6
- metadata.gz: f2aaa64f6b10b225353285a58f70c44d91c6ab0ac50051f6a82bf5dd63ed73a12f8c5df4e09230a3a5d5d535c5a6303af5c1f64d2c4908a7d37adbbe32632575
7
- data.tar.gz: 9248e063925c40870f2ada644dd55b6a3efd8f5034d4c870945ef0f017277f1cbc256d88911559cd03c1bf1f43a250aeb385a75b4003e6e59191b6eaf428fa76
6
+ metadata.gz: ce76ca5c3dcf855eba9f1ecd0d963bfb03791a80ed9fbee729e891932a96390b94df9ca748e19f73aaefb03afd5f55b0a1b873eb470eccf3d67b9e116118d23f
7
+ data.tar.gz: 761e7647eeb5d859c17694a8c681d9538cd6ffd680071d7f9f4cbe7d3aa3c718fac5451ed9624fdfad8a0e5101cd95690a3cce3d3e514e11ba7d2fa708478082
data/README.md CHANGED
@@ -6,14 +6,14 @@ A [Decidim](https://github.com/decidim/decidim) that provides a verification met
6
6
 
7
7
  This plugin allows to verify users against the `Direct verification` method by default, but it is not limited to it, it can be used to directly verify users against any other method registered for the organization.
8
8
 
9
- You can use this plugin in combination with the great [AccessRequests](https://github.com/mainio/decidim-module-access_requests) plugin from Maino Tech to provide and manage several levels of permissions to users in the platform Decidim.
10
-
11
- **Other features include:**
9
+ **Features:**
12
10
 
13
11
  1. Allows to massively register users directly in the platform prior (or independently) to verify them by sending them invite emails.
14
12
  > **IMPORTANT:**<br>
15
13
  > You must only use this feature if you have explicit consent from your users, otherwise you might be violating the [GDPR](https://eugdpr.org/) regulation in EU.
16
- 2. Can massively revoke authorizations given to any user with any verification method available.
14
+ 2. Massive authroizations of users using any verification method registered for the organization **if configured**.
15
+ 3. It can massively revoke authorizations given to any user with any verification method available.
16
+ 4. Shows user's statuses per verification method in a simple stats table.
17
17
 
18
18
  ## Screenshot
19
19
 
@@ -48,6 +48,56 @@ And then execute:
48
48
  bundle
49
49
  ```
50
50
 
51
+ ## Using additional verification methods
52
+
53
+ You can manage other verification methods (or workflow) a part from `Direct verification`. You need to configure it in a new file in the `config/initializers` folder.
54
+ For instance, you can use this same engine to have 2 levels of permissions in the platform.
55
+
56
+ Create a file like `config/initializers/decidim_verifications.rb` with content as:
57
+
58
+ **`config/initializers/decidim_verifications.rb`:**
59
+
60
+ ```ruby
61
+ # frozen_string_literal: true
62
+
63
+ # We are using the same DirectVerifications engine without the admin part to
64
+ # create a custom verification method called "direct_verifications_managers"
65
+ Decidim::Verifications.register_workflow(:direct_verifications_managers) do |workflow|
66
+ workflow.engine = Decidim::DirectVerifications::Verification::Engine
67
+ end
68
+
69
+ # We need to tell the plugin to handle this method in addition to the default "Direct verification". Any registered workflow is valid.
70
+ Decidim::DirectVerifications.configure do |config|
71
+ config.manage_workflows = %w(direct_verifications_managers)
72
+ end
73
+
74
+ ```
75
+
76
+ You will need the locales entries corresponding to your custom workflow, create as many files as languages you have in your application in `config/locales`:
77
+
78
+ **`config/locales/en.yml`:**
79
+
80
+ ```yaml
81
+ en:
82
+ decidim:
83
+ authorization_handlers:
84
+ direct_verifications_managers:
85
+ name: Organization managers
86
+ explanation: Direct Verifications Subgroup explanation
87
+ ```
88
+
89
+ Similarly, you can also overwrite the default title "Direct verification" by creating the key again in your locales:
90
+
91
+ ```yaml
92
+ en:
93
+ decidim:
94
+ authorization_handlers:
95
+ direct_verifications:
96
+ name: Generic organization members
97
+ explanation: Direct Verifications Subgroup explanation
98
+ ```
99
+
100
+
51
101
  ## Contributing
52
102
 
53
103
  See [Decidim](https://github.com/decidim/decidim).
@@ -0,0 +1 @@
1
+ //= link decidim/direct_verifications/verification/admin/direct_verifications_admin.js
@@ -0,0 +1,7 @@
1
+ // = require_self
2
+
3
+ $(() => {
4
+ $('[type="checkbox"]#register').change(function () {
5
+ $(this).closest('label').find('.callout').toggleClass('hide', !$(this).prop('checked'))
6
+ })
7
+ })
@@ -10,16 +10,21 @@ module Decidim
10
10
  layout "decidim/admin/users"
11
11
 
12
12
  def index
13
- enforce_permission_to :index, UserProcessor
13
+ enforce_permission_to :index, :authorization
14
+ @authorization_handler = :direct_verifications
15
+ @workflows = workflows
14
16
  end
15
17
 
16
18
  def create
17
- enforce_permission_to :create, UserProcessor
19
+ enforce_permission_to :create, :authorization
18
20
 
19
21
  @userlist = params[:userlist]
22
+ @workflows = workflows
20
23
  processor = UserProcessor.new(current_organization, current_user)
21
24
  processor.emails = extract_emails_to_hash @userlist
22
- processor.authorization_handler = params[:authorization_handler] if params[:authorization_handler]
25
+ processor.authorization_handler = authorization_handler(params[:authorization_handler])
26
+ stats = UserStats.new(current_organization)
27
+ stats.authorization_handler = processor.authorization_handler
23
28
  if params[:register]
24
29
  processor.register_users
25
30
  flash[:warning] = t(".registered", count: processor.emails.count,
@@ -39,28 +44,17 @@ module Decidim
39
44
  revoked: processor.processed[:revoked].count,
40
45
  errors: processor.errors[:revoked].count)
41
46
  else
47
+ stats.emails = processor.emails.keys
42
48
  flash[:info] = t(".info", handler: t("#{processor.authorization_handler}.name", scope: "decidim.authorization_handlers"),
43
49
  count: processor.emails.count,
44
- authorized: processor.total(:authorized),
45
- unconfirmed: processor.total(:unconfirmed),
46
- registered: processor.total(:registered))
50
+ authorized: stats.authorized,
51
+ unconfirmed: stats.unconfirmed,
52
+ registered: stats.registered)
47
53
  render(action: :index) && return
48
54
  end
49
55
  redirect_to direct_verifications_path
50
56
  end
51
57
 
52
- def permission_class_chain
53
- [
54
- Decidim::DirectVerifications::Verification::Admin::Permissions,
55
- Decidim::Admin::Permissions,
56
- Decidim::Permissions
57
- ]
58
- end
59
-
60
- def permission_scope
61
- :admin
62
- end
63
-
64
58
  private
65
59
 
66
60
  def extract_emails_to_hash(txt)
@@ -72,6 +66,22 @@ module Decidim
72
66
  ]
73
67
  end .to_h
74
68
  end
69
+
70
+ def authorization_handler(authorization_handler)
71
+ @authorization_handler = authorization_handler.presence || :direct_verifications
72
+ end
73
+
74
+ def configured_workflows
75
+ return Decidim::DirectVerifications.config.manage_workflows if Decidim::DirectVerifications.config
76
+ ["direct_verifications"]
77
+ end
78
+
79
+ def workflows
80
+ workflows = configured_workflows & current_organization.available_authorizations.map.to_a
81
+ workflows.map do |a|
82
+ [t("#{a}.name", scope: "decidim.authorization_handlers"), a]
83
+ end
84
+ end
75
85
  end
76
86
  end
77
87
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DirectVerifications
5
+ module Verification
6
+ module Admin
7
+ class StatsController < Decidim::Admin::ApplicationController
8
+ include NeedsPermission
9
+
10
+ layout "decidim/admin/users"
11
+
12
+ def index
13
+ enforce_permission_to :index, :authorization
14
+ stats = UserStats.new(current_organization)
15
+ @stats = {
16
+ t(".global") => stats_hash(stats)
17
+ }
18
+ current_organization.available_authorizations.map do |a|
19
+ stats.authorization_handler = a
20
+ @stats[t("#{a}.name", scope: "decidim.authorization_handlers")] = stats_hash(stats)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def stats_hash(stats)
27
+ {
28
+ registered: stats.registered,
29
+ authorized: stats.authorized,
30
+ unconfirmed: stats.unconfirmed,
31
+ authorized_unconfirmed: stats.authorized_unconfirmed
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,8 +1,8 @@
1
-
2
1
  <div class="card">
3
2
  <div class="card-divider">
4
3
  <h2 class="card-title">
5
4
  <%= t('admin.index.title', scope: 'decidim.direct_verifications.verification') %>
5
+ <%= link_to t("admin.index.stats", scope: 'decidim.direct_verifications.verification'), stats_path, class: "button tiny button--title" %>
6
6
  </h2>
7
7
  </div>
8
8
  <div class="card-section">
@@ -13,6 +13,9 @@
13
13
  <label>
14
14
  <%= check_box_tag :register %>
15
15
  <%= t('admin.new.register', scope: 'decidim.direct_verifications.verification') %>
16
+ <div data-alert class="callout alert hide">
17
+ <%= t('admin.direct_verifications.gdpr_disclaimer', scope: 'decidim.direct_verifications.verification') %>
18
+ </div>
16
19
  </label>
17
20
  <label>
18
21
  <%= radio_button_tag :authorize, 'in' %>
@@ -27,10 +30,9 @@
27
30
  <%= t('admin.new.check', scope: 'decidim.direct_verifications.verification') %>
28
31
  </label>
29
32
 
30
- <%= label_tag :userlist, t('admin.new.authorization_handler', scope: 'decidim.direct_verifications.verification') %>
31
- <%= select_tag :authorization_handler, options_for_select(current_organization.available_authorizations.map { |a|
32
- [t("#{a}.name", scope: "decidim.authorization_handlers"), a]
33
- }, :direct_verifications) %>
33
+ <%= label_tag :authorization_handler, t('admin.new.authorization_handler', scope: 'decidim.direct_verifications.verification') %>
34
+
35
+ <%= select_tag :authorization_handler, options_for_select(@workflows, @authorization_handler) %>
34
36
 
35
37
  <%= submit_tag t('admin.new.submit', scope: 'decidim.direct_verifications.verification'), class: 'button' %>
36
38
 
@@ -38,3 +40,5 @@
38
40
 
39
41
  </div>
40
42
  </div>
43
+
44
+ <%= javascript_include_tag "decidim/direct_verifications/verification/admin/direct_verifications_admin" %>
@@ -0,0 +1,35 @@
1
+ <div class="card">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t('admin.index.stats', scope: 'decidim.direct_verifications.verification') %>
5
+ <%= link_to t("admin.index.title", scope: 'decidim.direct_verifications.verification'), direct_verifications_path, class: "button tiny button--title" %>
6
+ </h2>
7
+ </div>
8
+ <div class="card-section">
9
+ <table class="table-list">
10
+ <thead>
11
+ <tr>
12
+ <th><%= t("admin.new.authorization_handler", scope: 'decidim.direct_verifications.verification') %></th>
13
+ <th><%= t(".registered") %></th>
14
+ <th><%= t(".authorized") %></th>
15
+ <th><%= t(".unconfirmed") %></th>
16
+ <th><%= t(".authorized_unconfirmed") %></th>
17
+ <th></th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ <% @stats.each do |a, s| %>
22
+ <tr>
23
+ <td>
24
+ <%= a %>
25
+ </td>
26
+ <td><%= s[:registered] %></td>
27
+ <td><%= s[:authorized] %></td>
28
+ <td><%= s[:unconfirmed] %></td>
29
+ <td><%= s[:authorized_unconfirmed] %></td>
30
+ </tr>
31
+ <% end %>
32
+ </tbody>
33
+ </table>
34
+ </div>
35
+ </div>
@@ -32,10 +32,15 @@ ca:
32
32
  detectats, %{errors} errors)
33
33
  revoked: S'ha revocat correctament la verificació de %{revoked} usuaris
34
34
  utilitzant [%{handler}] (%{count} detectats, %{errors} errors)
35
+ gdpr_disclaimer: Feu-ho sota la vostra responsabilitat. Recordeu que heu
36
+ de tenir el consentiment explícit dels vostres usuaris per registrar-los.
37
+ En cas contrari, estareu infringint la regulació GDPR als països de
38
+ la UE.
35
39
  index:
40
+ stats: Estadístiques d'usuaris
36
41
  title: Inscriu i autoritza usuaris
37
42
  new:
38
- authorization_handler: 'Mètode de verificació:'
43
+ authorization_handler: Mètode de verificació
39
44
  authorize: Autoritza els usuaris
40
45
  check: Comprova l'estat dels usuaris
41
46
  info: Introdueix aquí els emails, un per línia. Si els emails estan precedits
@@ -43,7 +48,14 @@ ca:
43
48
  register: Registra els usuaris a la plataforma (si existeixen s'ignoraran)
44
49
  revoke: Revoca l'autorització dels usuaris
45
50
  submit: Envia i processa el llistat
46
- textarea: 'Llista d''emails:'
51
+ textarea: Llista d''emails
52
+ stats:
53
+ index:
54
+ authorized: Verificats
55
+ authorized_unconfirmed: Verificats però no confirmats
56
+ global: "- Qualsevol mètode de verificació -"
57
+ registered: Registrats
58
+ unconfirmed: No confirmats
47
59
  authorizations:
48
60
  new:
49
61
  no_action: Aquest mètode requereix que un administrador us verifiqui
@@ -31,10 +31,14 @@ en:
31
31
  detected, %{errors} errors) "
32
32
  revoked: Verification from %{revoked} users have been revoked using
33
33
  [%{handler}] (%{count} detected, %{errors} errors)
34
+ gdpr_disclaimer: Do this under your responsibility. Remember that you
35
+ need to have explicit consent from your users in order to register them.
36
+ Otherwise you will be infringing the GDPR regulation in EU countries.
34
37
  index:
38
+ stats: User stats
35
39
  title: Register and authorize users
36
40
  new:
37
- authorization_handler: 'Verification method:'
41
+ authorization_handler: Verification method
38
42
  authorize: Authorize users
39
43
  check: Check users status
40
44
  info: Enter the emails here, one per line. If the emails are preceded
@@ -42,7 +46,14 @@ en:
42
46
  register: Register users in the platform (if they exist they will be ignored)
43
47
  revoke: Revoke authorization from users
44
48
  submit: Send and process the list
45
- textarea: 'Emails list:'
49
+ textarea: Emails list
50
+ stats:
51
+ index:
52
+ authorized: Authorized
53
+ authorized_unconfirmed: Authorized but unconfirmed
54
+ global: "- Any verification method -"
55
+ registered: Registered
56
+ unconfirmed: Unconfirmed
46
57
  authorizations:
47
58
  new:
48
59
  no_action: This method requires an administrator that verifies you
@@ -32,10 +32,15 @@ es:
32
32
  detectados, %{errors} errores)
33
33
  revoked: Se ha revocado correctament la verificación de %{revoked} usuarios
34
34
  usando [%{handler}] (%{count} detectados, %{errors} errores)
35
+ gdpr_disclaimer: Haga esto bajo su responsabilidad. Recuerde que debe
36
+ contar con el consentimiento explícito de sus usuarios para poder registrarlos.
37
+ De lo contrario, estará infringiendo la regulación GDPR en los países
38
+ de la UE.
35
39
  index:
40
+ stats: Estadísticas de usuarios
36
41
  title: Inscribe y autoriza usuarios
37
42
  new:
38
- authorization_handler: 'Método de verificación:'
43
+ authorization_handler: Método de verificación
39
44
  authorize: Autoriza los usuarios
40
45
  check: Comprueba el estado de los usuarios
41
46
  info: Introduce aquí los emails, uno por linea. Si los emails están precedidos
@@ -43,7 +48,14 @@ es:
43
48
  register: Registra los usuarios a la plataforma (si existen se ignorarán)
44
49
  revoke: Revoca la autorización de los usuarios
45
50
  submit: Envía y procesa el listado
46
- textarea: 'Lista de emails:'
51
+ textarea: Lista de emails
52
+ stats:
53
+ index:
54
+ authorized: Verificados
55
+ authorized_unconfirmed: Verificados pero sin confirmar
56
+ global: "- Cualquier método de verificación -"
57
+ registered: Registrados
58
+ unconfirmed: Sin confirmar
47
59
  authorizations:
48
60
  new:
49
61
  no_action: Este método requiere que un administrador os verifique
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "direct_verifications/version"
4
+ require_relative "direct_verifications/config"
4
5
  require_relative "direct_verifications/user_processor"
6
+ require_relative "direct_verifications/user_stats"
5
7
  require_relative "direct_verifications/verification"
6
8
 
7
9
  module Decidim
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DirectVerifications
5
+ class << self
6
+ attr_accessor :config
7
+ def configure
8
+ yield self.config ||= Config.new
9
+ end
10
+ end
11
+
12
+ class Config
13
+ attr_reader :manage_workflows
14
+ def manage_workflows=(manage_workflows)
15
+ @manage_workflows.concat(manage_workflows).uniq!
16
+ end
17
+
18
+ def initialize
19
+ @manage_workflows = ["direct_verifications"]
20
+ end
21
+ end
22
+ end
23
+ end
@@ -43,7 +43,7 @@ module Decidim
43
43
  @emails.each do |email, _name|
44
44
  if (u = find_user(email))
45
45
  auth = authorization(u)
46
- next if auth.granted?
46
+ next unless !auth.granted? || auth.expired?
47
47
  Verification::ConfirmUserAuthorization.call(auth, authorize_form(u)) do
48
48
  on(:ok) do
49
49
  add_processed :authorized, email
@@ -77,24 +77,6 @@ module Decidim
77
77
  end
78
78
  end
79
79
 
80
- def total(type)
81
- if type == :registered
82
- return User.where(email: @emails.keys, decidim_organization_id: @organization.id)
83
- .count
84
- end
85
- if type == :unconfirmed
86
- return User.where(email: @emails.keys, decidim_organization_id: @organization.id)
87
- .where(confirmed_at: nil).count
88
- end
89
- if type == :authorized
90
- return Decidim::Authorization.joins(:user)
91
- .where(name: authorization_handler)
92
- .where("decidim_users.email IN (:emails) AND decidim_users.decidim_organization_id=:org",
93
- emails: @emails.keys, org: @organization.id).count
94
- end
95
- 0
96
- end
97
-
98
80
  private
99
81
 
100
82
  def find_user(email)
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module DirectVerifications
5
+ class UserStats
6
+ def initialize(organization)
7
+ @organization = organization
8
+ @authorization_handler = ""
9
+ @emails = []
10
+ end
11
+
12
+ attr_reader :organization, :authorization_handler
13
+ attr_accessor :emails
14
+
15
+ def authorization_handler=(name)
16
+ @workflow_manifest = nil
17
+ @authorization_handler = name
18
+ end
19
+
20
+ def registered
21
+ registered_users.count
22
+ end
23
+
24
+ def unconfirmed
25
+ registered_users.where("decidim_users.confirmed_at IS NULL").count
26
+ end
27
+
28
+ def authorized
29
+ authorized_users.count
30
+ end
31
+
32
+ def authorized_unconfirmed
33
+ authorized_users.where("decidim_users.confirmed_at IS NULL").count
34
+ end
35
+
36
+ private
37
+
38
+ def registered_users
39
+ if authorization_handler.empty?
40
+ filter = { decidim_organization_id: organization.id }
41
+ filter[:email] = emails unless emails.empty?
42
+ return User.where(filter)
43
+ end
44
+ authorized_users(false)
45
+ end
46
+
47
+ def authorized_users(strict = true)
48
+ q = Decidim::Authorization.joins(:user)
49
+ unless authorization_handler.empty?
50
+ q = q.where(name: authorization_handler)
51
+ if strict
52
+ q = q.where.not(granted_at: nil)
53
+ q = q.where("decidim_authorizations.granted_at >= :date", date: Time.current - expires_in) if expires_in
54
+ end
55
+ end
56
+ q = q.where("decidim_users.decidim_organization_id=:org", org: organization.id)
57
+ return q if emails.empty?
58
+ q.where("decidim_users.email IN (:emails)", emails: emails)
59
+ end
60
+
61
+ def expires_in
62
+ return unless workflow_manifest
63
+ return if workflow_manifest.expires_in.zero?
64
+ workflow_manifest.expires_in
65
+ end
66
+
67
+ def workflow_manifest
68
+ return if authorization_handler.empty?
69
+ @workflow_manifest ||= Decidim::Verifications.find_workflow_manifest(authorization_handler)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -8,10 +8,15 @@ module Decidim
8
8
  paths["db/migrate"] = nil
9
9
 
10
10
  routes do
11
- resources :direct_verifications, only: [:index, :create]
11
+ resources :direct_verifications, only: [:index, :create, :stats]
12
+ resources :stats, only: [:index]
12
13
 
13
14
  root to: "direct_verifications#index"
14
15
  end
16
+
17
+ initializer "decidim_direct_verifications.admin_assets" do |app|
18
+ app.config.assets.precompile += %w(direct_verifications_admin_manifest.js)
19
+ end
15
20
  end
16
21
  end
17
22
  end
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # This holds the decidim-direct_verifications version.
5
5
  module DirectVerifications
6
- VERSION = "0.17.6"
6
+ VERSION = "0.17.7"
7
7
  DECIDIM_VERSION = ">= 0.17.0"
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-direct_verifications
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.6
4
+ version: 0.17.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Vergés
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-04 00:00:00.000000000 Z
11
+ date: 2019-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: decidim-admin
@@ -49,20 +49,25 @@ files:
49
49
  - LICENSE-AGPLv3.txt
50
50
  - README.md
51
51
  - Rakefile
52
+ - app/assets/config/direct_verifications_admin_manifest.js
53
+ - app/assets/javascripts/decidim/direct_verifications/verification/admin/direct_verifications_admin.js.es6
52
54
  - app/commands/decidim/direct_verifications/verification/confirm_user_authorization.rb
53
55
  - app/commands/decidim/direct_verifications/verification/destroy_user_authorization.rb
54
56
  - app/controllers/decidim/direct_verifications/verification/admin/direct_verifications_controller.rb
57
+ - app/controllers/decidim/direct_verifications/verification/admin/stats_controller.rb
55
58
  - app/controllers/decidim/direct_verifications/verification/authorizations_controller.rb
56
59
  - app/forms/decidim/direct_verifications/verification/direct_verifications_form.rb
57
- - app/permissions/decidim/direct_verifications/verification/admin/permissions.rb
58
60
  - app/views/decidim/direct_verifications/verification/admin/direct_verifications/index.html.erb
61
+ - app/views/decidim/direct_verifications/verification/admin/stats/index.html.erb
59
62
  - app/views/devise/mailer/direct_invite.html.erb
60
63
  - app/views/devise/mailer/direct_invite.text.erb
61
64
  - config/locales/ca.yml
62
65
  - config/locales/en.yml
63
66
  - config/locales/es.yml
64
67
  - lib/decidim/direct_verifications.rb
68
+ - lib/decidim/direct_verifications/config.rb
65
69
  - lib/decidim/direct_verifications/user_processor.rb
70
+ - lib/decidim/direct_verifications/user_stats.rb
66
71
  - lib/decidim/direct_verifications/verification.rb
67
72
  - lib/decidim/direct_verifications/verification/admin.rb
68
73
  - lib/decidim/direct_verifications/verification/admin_engine.rb
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module DirectVerifications
5
- module Verification
6
- module Admin
7
- # Defines the abilities related to direct_verifications for a logged in admin user.
8
- class Permissions < Decidim::DefaultPermissions
9
- def permissions
10
- return permission_action if permission_action.scope != :admin
11
- if user.organization.available_authorizations.include?("direct_verifications")
12
- allow! if permission_action.subject == Decidim::DirectVerifications::UserProcessor
13
- permission_action
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end