From 87fed8db8abd3a972078adca547c3477f083c21b Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Mon, 27 Nov 2023 18:02:20 +0100 Subject: [PATCH 1/6] Add signing group --- .../groups/groups_list_component.html.erb | 12 ++++----- .../admin/groups/groups_list_component.rb | 6 ++--- .../groups/groups_list_row_component.html.erb | 20 +++++++------- .../groups_list_row_component.html.erb | 8 ++---- app/controllers/admin/groups_controller.rb | 24 ++++++++++++----- app/models/group.rb | 27 ++++++++++++++++--- app/models/tenant.rb | 10 ++++--- app/policies/admin/group_policy.rb | 6 ++++- app/views/admin/groups/index.html.erb | 2 +- app/views/admin/groups/show.html.erb | 2 +- ...23152830_add_singing_to_group_enum_type.rb | 5 ++++ ...ate_signing_groups_for_existing_tenants.rb | 11 ++++++++ db/schema.rb | 4 +-- 13 files changed, 95 insertions(+), 42 deletions(-) create mode 100644 db/migrate/20231123152830_add_singing_to_group_enum_type.rb create mode 100644 db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb diff --git a/app/components/admin/groups/groups_list_component.html.erb b/app/components/admin/groups/groups_list_component.html.erb index d8337c348..f977b01e8 100644 --- a/app/components/admin/groups/groups_list_component.html.erb +++ b/app/components/admin/groups/groups_list_component.html.erb @@ -2,13 +2,13 @@
Skupiny
- <%= link_to new_admin_tenant_group_path, class: "px-3.5 py-2.5 bg-blue-600 rounded-md justify-center items-center gap-2.5 flex" do %> + <%= link_to new_admin_tenant_group_path, data: { turbo_frame: "modal" }, class: "px-3.5 py-2.5 bg-blue-600 rounded-md justify-center items-center gap-2.5 flex" do %>

Vytvoriť skupinu

<% end %>
- <% @custom_groups.each do |custom_group| %> - <%= render Admin::Groups::GroupsListRowComponent.new(custom_group) %> + <% @modifiable_groups.each do |group| %> + <%= render Admin::Groups::GroupsListRowComponent.new(group) %> <% end %>
@@ -16,12 +16,12 @@
Systémové skupiny
-
Zakladané automaticky, nie je možné upravovať
+
Nie je možné upravovať
- <% @system_groups.each do |system_group| %> - <%= render Admin::Groups::GroupsListRowComponent.new(system_group) %> + <% @fixed_groups.each do |group| %> + <%= render Admin::Groups::GroupsListRowComponent.new(group) %> <% end %>
diff --git a/app/components/admin/groups/groups_list_component.rb b/app/components/admin/groups/groups_list_component.rb index 2bea05a97..869fd3db3 100644 --- a/app/components/admin/groups/groups_list_component.rb +++ b/app/components/admin/groups/groups_list_component.rb @@ -1,6 +1,6 @@ class Admin::Groups::GroupsListComponent < ViewComponent::Base - def initialize(custom_groups:, system_groups:) - @custom_groups = custom_groups - @system_groups = system_groups + def initialize(modifiable_groups:, fixed_groups:) + @modifiable_groups = modifiable_groups + @fixed_groups = fixed_groups end end diff --git a/app/components/admin/groups/groups_list_row_component.html.erb b/app/components/admin/groups/groups_list_row_component.html.erb index a452da8a5..c99acc2a1 100644 --- a/app/components/admin/groups/groups_list_row_component.html.erb +++ b/app/components/admin/groups/groups_list_row_component.html.erb @@ -4,28 +4,30 @@
- <% if @group.is_modifiable? %> - <%= render Admin::Groups::GroupRenameComponent.new(@group) if @group.is_modifiable? %> + <% if @group.modifiable? %> + <%= render Admin::Groups::GroupRenameComponent.new(@group) %> <% else %> <%= @group.name %> <% end %>
- <%= link_to (@group.is_modifiable? ? edit_admin_tenant_group_path(@group.tenant, @group) : admin_tenant_group_path(@group.tenant, @group)), data: { turbo_frame: "modal" } do %> - <%= t :user, count: @group.users.count %> + <%= link_to (@group.modifiable? ? edit_admin_tenant_group_path(@group.tenant, @group) : admin_tenant_group_path(@group.tenant, @group)), data: { turbo_frame: "modal" } do %> + <%= t("user", count: @group.users.count) %> <% end %>
- <% if @group.is_modifiable? %> - <%= link_to edit_members_admin_tenant_group_path(@group.tenant, @group) do %> + <% if @group.modifiable? %> + <%= link_to edit_members_admin_tenant_group_path(@group.tenant, @group), data: { turbo_frame: "modal" } do %> <%= render Common::EditButtonComponent.new %> <% end %> - <%= button_to admin_tenant_group_path(@group.tenant, @group), method: :delete do %> - <%= render Common::DeleteButtonComponent.new %> + <% if @group.destroyable? %> + <%= link_to admin_tenant_group_path(@group.tenant, @group), method: :delete, data: { confirm: "Naozaj chcete zmazať skupinu '#{@group.name}'?" } do %> + <%= render Common::DeleteButtonComponent.new %> + <% end %> <% end %> <% else %> - <%= link_to show_members_admin_tenant_group_path(@group.tenant, @group) do %> + <%= link_to show_members_admin_tenant_group_path(@group.tenant, @group), data: { turbo_frame: "modal" } do %> <%= render Common::ShowButtonComponent.new %> <% end %> <% end %> diff --git a/app/components/admin/permissions/groups_list_row_component.html.erb b/app/components/admin/permissions/groups_list_row_component.html.erb index a06b6b7c6..9ac1df95f 100644 --- a/app/components/admin/permissions/groups_list_row_component.html.erb +++ b/app/components/admin/permissions/groups_list_row_component.html.erb @@ -5,14 +5,10 @@
- <% if @group.is_modifiable? %> - <%= render Admin::Groups::GroupRenameComponent.new(@group) if @group.is_modifiable? %> - <% else %> - <%= @group.name %> - <% end %> + <%= @group.name %>
- <%= t :user, count: @group.users.count %> + <%= t("user", count: @group.users.count) %>
diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 11578d6d2..98eb4c705 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -3,13 +3,13 @@ class Admin::GroupsController < ApplicationController def index authorize([:admin, Group]) - @custom_groups = policy_scope([:admin, Group]).where(tenant_id: Current.tenant.id).where.not(group_type: %w[ALL USER]) - @system_groups = policy_scope([:admin, Group]).where(tenant_id: Current.tenant.id, group_type: %w[ALL USER]) + + @modifiable_groups = group_policy_scope.where(tenant_id: Current.tenant.id).modifiable + @fixed_groups = group_policy_scope.where(tenant_id: Current.tenant.id).fixed end def show authorize([:admin, @group]) - @other_tags = other_tags end def new @@ -77,7 +77,7 @@ def search_non_tags private def non_members_search_clause - policy_scope([:admin, User]) + user_policy_scope .where(tenant: Current.tenant.id) .where.not(id: User.joins(:group_memberships).where(group_memberships: { group_id: @group.id })) .where('unaccent(name) ILIKE unaccent(?)', "%#{params[:name_search]}%") @@ -85,7 +85,7 @@ def non_members_search_clause end def non_tags_search_clause - policy_scope([:admin, Tag]) + tag_policy_scope .where(tenant: Current.tenant.id) .where.not(id: Tag.joins(:tag_groups).where(tag_groups: { group_id: @group.id })) .where('unaccent(name) ILIKE unaccent(?)', "%#{params[:name_search]}%") @@ -93,10 +93,22 @@ def non_tags_search_clause end def set_group - @group = policy_scope([:admin, Group]).find(params[:id]) + @group = group_policy_scope.find(params[:id]) end def group_params params.require(:group).permit(:name, :group_type) end + + def group_policy_scope + policy_scope([:admin, Group]) + end + + def user_policy_scope + policy_scope([:admin, User]) + end + + def tag_policy_scope + policy_scope([:admin, Tag]) + end end diff --git a/app/models/group.rb b/app/models/group.rb index 4c473143c..4aa748723 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -16,11 +16,32 @@ class Group < ApplicationRecord has_many :tag_groups, dependent: :destroy has_many :tags, through: :tag_groups + ALL_TYPE = 'ALL' + USER_TYPE = 'USER' + ADMIN_TYPE = 'ADMIN' + CUSTOM_TYPE = 'CUSTOM' + SIGNING_TYPE = 'SIGNING' + + scope :fixed, -> { where(group_type: %w[ALL USER]) } + scope :modifiable, -> { where.not(group_type: %w[ALL USER]) } + validates_presence_of :name validates_uniqueness_of :name, scope: :tenant_id - validates :group_type, inclusion: { in: ['ALL', 'USER', 'ADMIN', 'CUSTOM'], allow_blank: false } + validates :group_type, inclusion: { in: [ALL_TYPE, USER_TYPE, ADMIN_TYPE, CUSTOM_TYPE, SIGNING_TYPE], allow_blank: false } + + def modifiable? + !group_type.in? [ALL_TYPE, USER_TYPE] + end + + def fixed? + !modifiable? + end + + def system? + group_type != CUSTOM_TYPE + end - def is_modifiable? - !group_type.in? %w[ALL USER] + def destroyable? + !system? end end diff --git a/app/models/tenant.rb b/app/models/tenant.rb index 30c5a0d54..719587f53 100644 --- a/app/models/tenant.rb +++ b/app/models/tenant.rb @@ -11,8 +11,9 @@ class Tenant < ApplicationRecord has_many :users, dependent: :destroy has_many :groups, dependent: :destroy - has_one :all_group, -> { where(group_type: 'ALL') }, class_name: 'Group' - has_many :admin_groups, -> { where(group_type: 'ADMIN') }, class_name: 'Group' + has_one :all_group, -> { where(group_type: Group::ALL_TYPE) }, class_name: 'Group' + has_one :signing_group, -> { where(group_type: Group::SIGNING_TYPE) }, class_name: 'Group' + has_many :admin_groups, -> { where(group_type: ADMIN_TYPE) }, class_name: 'Group' has_many :boxes, dependent: :destroy has_many :automation_rules, class_name: 'Automation::Rule', dependent: :destroy @@ -25,8 +26,9 @@ class Tenant < ApplicationRecord private def create_default_objects - groups.create!(name: 'all', group_type: 'ALL') - groups.create!(name: 'admins', group_type: 'ADMIN') + groups.create!(name: 'all', group_type: Group::ALL_TYPE) + groups.create!(name: 'admins', group_type: Group::ADMIN_TYPE) + groups.create!(name: 'Podpisovatelia', group_type: Group::SIGNING_TYPE) tags.create!(name: 'Drafty', system_name: Tag::DRAFT_SYSTEM_NAME, external: false, visible: true) tags.create!(name: 'Na prevzatie', system_name: 'delivery_notification', external: false, visible: true) end diff --git a/app/policies/admin/group_policy.rb b/app/policies/admin/group_policy.rb index b4b4ec855..61e7e14c4 100644 --- a/app/policies/admin/group_policy.rb +++ b/app/policies/admin/group_policy.rb @@ -35,6 +35,8 @@ def new? end def update? + return false if @group.fixed? + @user.site_admin? || @user.admin? end @@ -47,7 +49,7 @@ def edit_members? end def show_members? - update? + @user.site_admin? || @user.admin? end def edit_permissions? @@ -55,6 +57,8 @@ def edit_permissions? end def destroy? + return false if @group.system? + @user.site_admin? || @user.admin? end diff --git a/app/views/admin/groups/index.html.erb b/app/views/admin/groups/index.html.erb index f71494a6c..486ec1e52 100644 --- a/app/views/admin/groups/index.html.erb +++ b/app/views/admin/groups/index.html.erb @@ -1 +1 @@ -<%= render Admin::Groups::GroupsListComponent.new(custom_groups: @custom_groups, system_groups: @system_groups) %> +<%= render Admin::Groups::GroupsListComponent.new(modifiable_groups: @modifiable_groups, fixed_groups: @fixed_groups) %> diff --git a/app/views/admin/groups/show.html.erb b/app/views/admin/groups/show.html.erb index 94ba4829b..324ae5e4a 100644 --- a/app/views/admin/groups/show.html.erb +++ b/app/views/admin/groups/show.html.erb @@ -1 +1 @@ -<%= render Admin::Groups::GroupFormComponent.new(group: @group, step: :show)%> +<%= render Admin::Groups::GroupFormComponent.new(group: @group, readonly: true)%> diff --git a/db/migrate/20231123152830_add_singing_to_group_enum_type.rb b/db/migrate/20231123152830_add_singing_to_group_enum_type.rb new file mode 100644 index 000000000..34d24c6ed --- /dev/null +++ b/db/migrate/20231123152830_add_singing_to_group_enum_type.rb @@ -0,0 +1,5 @@ +class AddSingingToGroupEnumType < ActiveRecord::Migration[7.0] + def change + execute "ALTER TYPE group_type ADD VALUE 'SIGNING';" + end +end diff --git a/db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb b/db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb new file mode 100644 index 000000000..2e30b4f77 --- /dev/null +++ b/db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb @@ -0,0 +1,11 @@ +class GenerateSigningGroupsForExistingTenants < ActiveRecord::Migration[7.0] + def up + Tenant.find_each do |tenant| + tenant.groups.create!(name: 'Podpisovatelia', group_type: Group::SIGNING_TYPE) + end + end + + def down + Group.where(group_type: Group::SIGNING_TYPE).destroy_all + end +end diff --git a/db/schema.rb b/db/schema.rb index a64d6eb8d..061abd6d3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_11_23_085142) do +ActiveRecord::Schema[7.0].define(version: 2023_11_23_152912) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -19,7 +19,7 @@ # Custom types defined in this database. # Note that some types may not work with other database engines. Be careful if changing database. create_enum "color", ["slate", "gray", "zinc", "neutral", "stone", "red", "orange", "amber", "yellow", "lime", "green", "emerald", "teal", "cyan", "sky", "blue", "indigo", "violet", "purple", "fuchsia", "pink", "rose"] - create_enum "group_type", ["ALL", "USER", "CUSTOM", "ADMIN"] + create_enum "group_type", ["ALL", "USER", "CUSTOM", "ADMIN", "SIGNING"] create_table "active_storage_attachments", force: :cascade do |t| t.string "name", null: false From d0277d23f42888b89865e8b6c96394b776afdb67 Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Mon, 27 Nov 2023 18:09:34 +0100 Subject: [PATCH 2/6] Fix constant scope --- app/models/tenant.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/tenant.rb b/app/models/tenant.rb index 719587f53..04e8c8dc9 100644 --- a/app/models/tenant.rb +++ b/app/models/tenant.rb @@ -13,7 +13,7 @@ class Tenant < ApplicationRecord has_one :all_group, -> { where(group_type: Group::ALL_TYPE) }, class_name: 'Group' has_one :signing_group, -> { where(group_type: Group::SIGNING_TYPE) }, class_name: 'Group' - has_many :admin_groups, -> { where(group_type: ADMIN_TYPE) }, class_name: 'Group' + has_many :admin_groups, -> { where(group_type: Group::ADMIN_TYPE) }, class_name: 'Group' has_many :boxes, dependent: :destroy has_many :automation_rules, class_name: 'Automation::Rule', dependent: :destroy From 1d111c42cc09da73800b4418ca2e4d940541465d Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Tue, 28 Nov 2023 00:41:11 +0100 Subject: [PATCH 3/6] Convert group_type to STI --- .../groups/group_rename_component.html.erb | 2 +- .../groups/groups_list_component.html.erb | 2 +- .../admin/groups/groups_list_component.rb | 4 +-- .../groups/groups_list_row_component.html.erb | 8 ++--- .../groups/new_group_form_component.html.erb | 2 +- app/controllers/admin/groups_controller.rb | 33 +++++++++---------- app/models/group.rb | 23 ++++--------- app/models/group_admin.rb | 14 ++++++++ app/models/group_all.rb | 14 ++++++++ app/models/group_custom.rb | 14 ++++++++ app/models/group_membership.rb | 5 --- app/models/group_signer.rb | 14 ++++++++ app/models/group_user.rb | 14 ++++++++ app/models/tag.rb | 2 +- app/models/tenant.rb | 15 +++++---- app/models/user.rb | 9 ++--- app/policies/admin/group_policy.rb | 4 +-- app/views/admin/groups/_form.html.erb | 4 --- app/views/admin/groups/_group.html.erb | 4 +-- app/views/admin/groups/index.html.erb | 2 +- ...23152830_add_singing_to_group_enum_type.rb | 5 --- .../20231127215006_convert_groups_to_sti.rb | 27 +++++++++++++++ ...te_signing_groups_for_existing_tenants.rb} | 4 +-- db/schema.rb | 7 ++-- test/fixtures/groups.yml | 11 +++++-- test/models/tag_test.rb | 2 +- 26 files changed, 162 insertions(+), 83 deletions(-) create mode 100644 app/models/group_admin.rb create mode 100644 app/models/group_all.rb create mode 100644 app/models/group_custom.rb create mode 100644 app/models/group_signer.rb create mode 100644 app/models/group_user.rb delete mode 100644 db/migrate/20231123152830_add_singing_to_group_enum_type.rb create mode 100644 db/migrate/20231127215006_convert_groups_to_sti.rb rename db/migrate/{20231123152912_generate_signing_groups_for_existing_tenants.rb => 20231127223506_generate_signing_groups_for_existing_tenants.rb} (51%) diff --git a/app/components/admin/groups/group_rename_component.html.erb b/app/components/admin/groups/group_rename_component.html.erb index 785c53214..440168d25 100644 --- a/app/components/admin/groups/group_rename_component.html.erb +++ b/app/components/admin/groups/group_rename_component.html.erb @@ -14,7 +14,7 @@
- <% if @group.modifiable? %> + <% if @group.editable? %> <%= render Admin::Groups::GroupRenameComponent.new(@group) %> <% else %> <%= @group.name %> <% end %>
- <%= link_to (@group.modifiable? ? edit_admin_tenant_group_path(@group.tenant, @group) : admin_tenant_group_path(@group.tenant, @group)), data: { turbo_frame: "modal" } do %> + <%= link_to (@group.editable? ? edit_admin_tenant_group_path(@group.tenant, @group) : admin_tenant_group_path(@group.tenant, @group)), data: { turbo_frame: "modal" } do %> <%= t("user", count: @group.users.count) %> <% end %>
- <% if @group.modifiable? %> + <% if @group.editable? %> <%= link_to edit_members_admin_tenant_group_path(@group.tenant, @group), data: { turbo_frame: "modal" } do %> <%= render Common::EditButtonComponent.new %> <% end %> <% if @group.destroyable? %> - <%= link_to admin_tenant_group_path(@group.tenant, @group), method: :delete, data: { confirm: "Naozaj chcete zmazať skupinu '#{@group.name}'?" } do %> + <%= button_to admin_tenant_group_path(@group.tenant, @group), method: :delete, data: { turbo_confirm: "Naozaj chcete zmazať skupinu '#{@group.name}'?" } do %> <%= render Common::DeleteButtonComponent.new %> <% end %> <% end %> diff --git a/app/components/admin/groups/new_group_form_component.html.erb b/app/components/admin/groups/new_group_form_component.html.erb index a3f9a9747..2621abbdd 100644 --- a/app/components/admin/groups/new_group_form_component.html.erb +++ b/app/components/admin/groups/new_group_form_component.html.erb @@ -10,7 +10,7 @@
<%= render Common::CloseButtonComponent.new(link_to: admin_tenant_groups_path(Current.tenant)) %> - <%= form_with model: [:admin, Current.tenant, @group] do |form| %> + <%= form_with model: [:admin, Current.tenant, @group], url: admin_tenant_groups_path(Current.tenant, @group) do |form| %>
diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 98eb4c705..45c53bf61 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -4,39 +4,38 @@ class Admin::GroupsController < ApplicationController def index authorize([:admin, Group]) - @modifiable_groups = group_policy_scope.where(tenant_id: Current.tenant.id).modifiable - @fixed_groups = group_policy_scope.where(tenant_id: Current.tenant.id).fixed + @editable_groups = group_policy_scope.where(tenant_id: Current.tenant.id).editable + @fixed_groups = group_policy_scope.where(tenant_id: Current.tenant.id).where.not(id: @editable_groups.pluck(:id)) end def show - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def new - @group = Current.tenant.groups.new - authorize([:admin, @group]) + @group = Current.tenant.custom_groups.new + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def edit - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def edit_members - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def show_members - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def edit_permissions - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) end def create - @group = Current.tenant.groups.new(group_params) - @group.group_type = 'CUSTOM' - authorize([:admin, @group]) + @group = Current.tenant.custom_groups.new(group_params) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) if @group.save redirect_to edit_members_admin_tenant_group_url(Current.tenant, @group, step: :new), notice: 'Group was successfully created' @@ -46,7 +45,7 @@ def create end def update - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) if @group.update(group_params) redirect_to admin_tenant_groups_url(Current.tenant), notice: 'Group was successfully updated' else @@ -55,20 +54,20 @@ def update end def destroy - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) @group.destroy redirect_to admin_tenant_groups_url(Current.tenant), notice: 'Group was successfully destroyed' end def search_non_members - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) return if params[:name_search].blank? @users = non_members_search_clause end def search_non_tags - authorize([:admin, @group]) + authorize([:admin, @group], policy_class: Admin::GroupPolicy) return if params[:name_search].blank? @tags = non_tags_search_clause @@ -97,7 +96,7 @@ def set_group end def group_params - params.require(:group).permit(:name, :group_type) + params.require(:group_custom).permit(:name) end def group_policy_scope diff --git a/app/models/group.rb b/app/models/group.rb index 4aa748723..2608eb3f0 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -3,8 +3,9 @@ # Table name: groups # # id :bigint not null, primary key -# group_type :enum not null +# group_type :enum # name :string not null +# type :string not null # created_at :datetime not null # updated_at :datetime not null # tenant_id :bigint not null @@ -16,29 +17,17 @@ class Group < ApplicationRecord has_many :tag_groups, dependent: :destroy has_many :tags, through: :tag_groups - ALL_TYPE = 'ALL' - USER_TYPE = 'USER' - ADMIN_TYPE = 'ADMIN' - CUSTOM_TYPE = 'CUSTOM' - SIGNING_TYPE = 'SIGNING' - - scope :fixed, -> { where(group_type: %w[ALL USER]) } - scope :modifiable, -> { where.not(group_type: %w[ALL USER]) } + scope :editable, -> { where.not(type: %w[GroupAll GroupUser]) } validates_presence_of :name validates_uniqueness_of :name, scope: :tenant_id - validates :group_type, inclusion: { in: [ALL_TYPE, USER_TYPE, ADMIN_TYPE, CUSTOM_TYPE, SIGNING_TYPE], allow_blank: false } - - def modifiable? - !group_type.in? [ALL_TYPE, USER_TYPE] - end - def fixed? - !modifiable? + def editable? + type.in? %w[GroupAdmin GroupCustom GroupSigner] end def system? - group_type != CUSTOM_TYPE + type != GroupCustom.to_s end def destroyable? diff --git a/app/models/group_admin.rb b/app/models/group_admin.rb new file mode 100644 index 000000000..fe7ff436c --- /dev/null +++ b/app/models/group_admin.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class GroupAdmin < Group +end diff --git a/app/models/group_all.rb b/app/models/group_all.rb new file mode 100644 index 000000000..19e3de959 --- /dev/null +++ b/app/models/group_all.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class GroupAll < Group +end diff --git a/app/models/group_custom.rb b/app/models/group_custom.rb new file mode 100644 index 000000000..ecddfe49b --- /dev/null +++ b/app/models/group_custom.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class GroupCustom < Group +end diff --git a/app/models/group_membership.rb b/app/models/group_membership.rb index f1b1e4712..858b5b9c4 100644 --- a/app/models/group_membership.rb +++ b/app/models/group_membership.rb @@ -11,9 +11,4 @@ class GroupMembership < ApplicationRecord belongs_to :group belongs_to :user - - def group_membership_modifiable? - # can't be removed from default groups - "TENANT_NAME"_ALL group and named user default group "USER_NAME"_USER - !group.group_type.in? ['ALL', 'USER'] - end end diff --git a/app/models/group_signer.rb b/app/models/group_signer.rb new file mode 100644 index 000000000..573af9e75 --- /dev/null +++ b/app/models/group_signer.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class GroupSigner < Group +end diff --git a/app/models/group_user.rb b/app/models/group_user.rb new file mode 100644 index 000000000..c6fea5812 --- /dev/null +++ b/app/models/group_user.rb @@ -0,0 +1,14 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class GroupUser < Group +end diff --git a/app/models/tag.rb b/app/models/tag.rb index bb0a62554..165d294ad 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -28,7 +28,7 @@ class Tag < ApplicationRecord scope :visible, -> { where(visible: true) } - after_create_commit ->(tag) { tag.mark_readable_by_groups(tag.tenant.admin_groups) } + after_create_commit ->(tag) { tag.mark_readable_by_groups([tag.tenant.admin_group]) } after_update_commit ->(tag) { EventBus.publish(:tag_renamed, tag) if previous_changes.key?("name") } after_destroy ->(tag) { EventBus.publish(:tag_destroyed, tag) } diff --git a/app/models/tenant.rb b/app/models/tenant.rb index 04e8c8dc9..78b8f3d4e 100644 --- a/app/models/tenant.rb +++ b/app/models/tenant.rb @@ -11,12 +11,13 @@ class Tenant < ApplicationRecord has_many :users, dependent: :destroy has_many :groups, dependent: :destroy - has_one :all_group, -> { where(group_type: Group::ALL_TYPE) }, class_name: 'Group' - has_one :signing_group, -> { where(group_type: Group::SIGNING_TYPE) }, class_name: 'Group' - has_many :admin_groups, -> { where(group_type: Group::ADMIN_TYPE) }, class_name: 'Group' + has_one :all_group, class_name: "GroupAll" + has_one :signer_group, class_name: "GroupSigner" + has_one :admin_group, class_name: "GroupAdmin" + has_many :custom_groups, class_name: "GroupCustom" has_many :boxes, dependent: :destroy - has_many :automation_rules, class_name: 'Automation::Rule', dependent: :destroy + has_many :automation_rules, class_name: "Automation::Rule", dependent: :destroy has_many :tags, dependent: :destroy has_many :filters after_create :create_default_objects @@ -26,9 +27,9 @@ class Tenant < ApplicationRecord private def create_default_objects - groups.create!(name: 'all', group_type: Group::ALL_TYPE) - groups.create!(name: 'admins', group_type: Group::ADMIN_TYPE) - groups.create!(name: 'Podpisovatelia', group_type: Group::SIGNING_TYPE) + create_all_group!(name: "all") + create_admin_group!(name: "admins") + create_signer_group!(name: "Podpisovatelia") tags.create!(name: 'Drafty', system_name: Tag::DRAFT_SYSTEM_NAME, external: false, visible: true) tags.create!(name: 'Na prevzatie', system_name: 'delivery_notification', external: false, visible: true) end diff --git a/app/models/user.rb b/app/models/user.rb index 53d0d7286..685547110 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -11,6 +11,7 @@ # class User < ApplicationRecord belongs_to :tenant + has_many :group_memberships, dependent: :destroy has_many :groups, through: :group_memberships has_many :own_tags, class_name: 'Tag', foreign_key: 'user_id', inverse_of: :owner, dependent: :nullify @@ -29,21 +30,21 @@ def site_admin? end def admin? - groups.exists?(group_type: 'ADMIN') + groups.exists?(type: 'GroupAdmin') end def user_group - groups.where(group_type: 'USER').first + groups.where(type: 'GroupUser').first end private def delete_user_group - groups.destroy_by(group_type: 'USER') + user_group.destroy end def handle_default_groups - groups.create!(name: name, group_type: 'USER', tenant_id: tenant_id) + groups.create!(name: name, type: 'GroupUser', tenant_id: tenant_id) group_memberships.create!(group: tenant.all_group) end end diff --git a/app/policies/admin/group_policy.rb b/app/policies/admin/group_policy.rb index 61e7e14c4..9800bba87 100644 --- a/app/policies/admin/group_policy.rb +++ b/app/policies/admin/group_policy.rb @@ -35,7 +35,7 @@ def new? end def update? - return false if @group.fixed? + return false unless @group.editable? @user.site_admin? || @user.admin? end @@ -53,7 +53,7 @@ def show_members? end def edit_permissions? - update? + @user.site_admin? || @user.admin? end def destroy? diff --git a/app/views/admin/groups/_form.html.erb b/app/views/admin/groups/_form.html.erb index 9a9aa22b7..d203d8e38 100644 --- a/app/views/admin/groups/_form.html.erb +++ b/app/views/admin/groups/_form.html.erb @@ -13,10 +13,6 @@ <%= form.label :name %> <%= form.text_field :name, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
-
- <%= form.label :group_type %> - <%= form.select :group_type, ['CUSTOM', 'ADMIN'], class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %> -
<%= form.label :tenant_id %> <%= form.text_field :tenant_id, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %> diff --git a/app/views/admin/groups/_group.html.erb b/app/views/admin/groups/_group.html.erb index f3e86a6cf..98f25b147 100644 --- a/app/views/admin/groups/_group.html.erb +++ b/app/views/admin/groups/_group.html.erb @@ -4,8 +4,8 @@ <%= group.name %>

- Group type: - <%= group.group_type %> + Type: + <%= group.type.to_s %>

Tenant: diff --git a/app/views/admin/groups/index.html.erb b/app/views/admin/groups/index.html.erb index 486ec1e52..ac3e4cee0 100644 --- a/app/views/admin/groups/index.html.erb +++ b/app/views/admin/groups/index.html.erb @@ -1 +1 @@ -<%= render Admin::Groups::GroupsListComponent.new(modifiable_groups: @modifiable_groups, fixed_groups: @fixed_groups) %> +<%= render Admin::Groups::GroupsListComponent.new(editable_groups: @editable_groups, fixed_groups: @fixed_groups) %> diff --git a/db/migrate/20231123152830_add_singing_to_group_enum_type.rb b/db/migrate/20231123152830_add_singing_to_group_enum_type.rb deleted file mode 100644 index 34d24c6ed..000000000 --- a/db/migrate/20231123152830_add_singing_to_group_enum_type.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddSingingToGroupEnumType < ActiveRecord::Migration[7.0] - def change - execute "ALTER TYPE group_type ADD VALUE 'SIGNING';" - end -end diff --git a/db/migrate/20231127215006_convert_groups_to_sti.rb b/db/migrate/20231127215006_convert_groups_to_sti.rb new file mode 100644 index 000000000..010162550 --- /dev/null +++ b/db/migrate/20231127215006_convert_groups_to_sti.rb @@ -0,0 +1,27 @@ +class ConvertGroupsToSti < ActiveRecord::Migration[7.0] + def up + add_column :groups, :type, :string, null: true + + Group.find_each do |group| + type = case group.group_type + when 'ALL' + 'GroupAll' + when 'ADMIN' + 'GroupAdmin' + when 'USER' + 'GroupUser' + when 'CUSTOM' + 'GroupCustom' + end + + group.update_column(:type, type) + end + + change_column_null :groups, :type, false + change_column_null :groups, :group_type, true + end + + def down + remove_column :groups, :type + end +end diff --git a/db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb b/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb similarity index 51% rename from db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb rename to db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb index 2e30b4f77..4e145f542 100644 --- a/db/migrate/20231123152912_generate_signing_groups_for_existing_tenants.rb +++ b/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb @@ -1,11 +1,11 @@ class GenerateSigningGroupsForExistingTenants < ActiveRecord::Migration[7.0] def up Tenant.find_each do |tenant| - tenant.groups.create!(name: 'Podpisovatelia', group_type: Group::SIGNING_TYPE) + tenant.create_signer_group!(name: 'Podpisovatelia') end end def down - Group.where(group_type: Group::SIGNING_TYPE).destroy_all + GroupSigner.destroy_all end end diff --git a/db/schema.rb b/db/schema.rb index 061abd6d3..87bdaf763 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_11_23_152912) do +ActiveRecord::Schema[7.0].define(version: 2023_11_27_223506) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" @@ -19,7 +19,7 @@ # Custom types defined in this database. # Note that some types may not work with other database engines. Be careful if changing database. create_enum "color", ["slate", "gray", "zinc", "neutral", "stone", "red", "orange", "amber", "yellow", "lime", "green", "emerald", "teal", "cyan", "sky", "blue", "indigo", "violet", "purple", "fuchsia", "pink", "rose"] - create_enum "group_type", ["ALL", "USER", "CUSTOM", "ADMIN", "SIGNING"] + create_enum "group_type", ["ALL", "USER", "CUSTOM", "ADMIN"] create_table "active_storage_attachments", force: :cascade do |t| t.string "name", null: false @@ -268,9 +268,10 @@ create_table "groups", force: :cascade do |t| t.string "name", null: false t.bigint "tenant_id", null: false - t.enum "group_type", null: false, enum_type: "group_type" + t.enum "group_type", enum_type: "group_type" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "type", null: false t.index ["tenant_id"], name: "index_groups_on_tenant_id" end diff --git a/test/fixtures/groups.yml b/test/fixtures/groups.yml index 50a9de531..575c6fd77 100644 --- a/test/fixtures/groups.yml +++ b/test/fixtures/groups.yml @@ -2,15 +2,20 @@ all: name: all - group_type: ALL + type: GroupAll tenant: ssd admins: name: admins - group_type: ADMIN + type: GroupAdmin tenant: ssd basic_user: name: "Basic user" - group_type: USER + type: GroupUser tenant: ssd + +solver_admin: + name: admins + type: GroupAdmin + tenant: solver diff --git a/test/models/tag_test.rb b/test/models/tag_test.rb index dda6ca210..dd3cf2e2a 100644 --- a/test/models/tag_test.rb +++ b/test/models/tag_test.rb @@ -5,6 +5,6 @@ class TagTest < ActiveSupport::TestCase tenant = tenants(:ssd) tag = Tag.create(name: 'New tag', tenant: tenant) - assert tenant.admin_groups == tag.groups + assert tag.groups == [tenant.admin_group] end end From 4f16a20119fb46ecd3acdc78dad9cd76920c4543 Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Tue, 28 Nov 2023 13:16:44 +0100 Subject: [PATCH 4/6] Use better naming for Groups --- .../groups/groups_list_component.html.erb | 4 ++-- .../admin/groups/groups_list_component.rb | 4 ++-- .../groups/groups_list_row_component.html.erb | 2 +- app/controllers/admin/groups_controller.rb | 4 ++-- .../{group_signer.rb => admin_group.rb} | 5 ++++- app/models/{group_custom.rb => all_group.rb} | 5 ++++- app/models/audit_log.rb | 19 +++++++++++++++++++ .../{group_admin.rb => custom_group.rb} | 2 +- app/models/group.rb | 12 +++++++++--- app/models/group_user.rb | 14 -------------- app/models/signer_group.rb | 17 +++++++++++++++++ app/models/tenant.rb | 10 +++++----- app/models/user.rb | 6 +++--- app/models/{group_all.rb => user_group.rb} | 2 +- app/views/admin/groups/index.html.erb | 2 +- config/locales/sk.yml | 5 +++++ .../20231127215006_convert_groups_to_sti.rb | 17 +++++++++-------- ...ate_signing_groups_for_existing_tenants.rb | 4 ++-- 18 files changed, 87 insertions(+), 47 deletions(-) rename app/models/{group_signer.rb => admin_group.rb} (81%) rename app/models/{group_custom.rb => all_group.rb} (82%) rename app/models/{group_admin.rb => custom_group.rb} (92%) delete mode 100644 app/models/group_user.rb create mode 100644 app/models/signer_group.rb rename app/models/{group_all.rb => user_group.rb} (93%) diff --git a/app/components/admin/groups/groups_list_component.html.erb b/app/components/admin/groups/groups_list_component.html.erb index 3f2a8e07b..ae4d3476c 100644 --- a/app/components/admin/groups/groups_list_component.html.erb +++ b/app/components/admin/groups/groups_list_component.html.erb @@ -15,12 +15,12 @@

-
Systémové skupiny
+
Uzamknuté skupiny
Nie je možné upravovať
- <% @fixed_groups.each do |group| %> + <% @non_editable_groups.each do |group| %> <%= render Admin::Groups::GroupsListRowComponent.new(group) %> <% end %>
diff --git a/app/components/admin/groups/groups_list_component.rb b/app/components/admin/groups/groups_list_component.rb index 6420fcc5a..d3760e96c 100644 --- a/app/components/admin/groups/groups_list_component.rb +++ b/app/components/admin/groups/groups_list_component.rb @@ -1,6 +1,6 @@ class Admin::Groups::GroupsListComponent < ViewComponent::Base - def initialize(editable_groups:, fixed_groups:) + def initialize(editable_groups:, non_editable_groups:) @editable_groups = editable_groups - @fixed_groups = fixed_groups + @non_editable_groups = non_editable_groups end end diff --git a/app/components/admin/groups/groups_list_row_component.html.erb b/app/components/admin/groups/groups_list_row_component.html.erb index a33d720eb..0f6c41be2 100644 --- a/app/components/admin/groups/groups_list_row_component.html.erb +++ b/app/components/admin/groups/groups_list_row_component.html.erb @@ -4,7 +4,7 @@
- <% if @group.editable? %> + <% if @group.renamable? %> <%= render Admin::Groups::GroupRenameComponent.new(@group) %> <% else %> <%= @group.name %> diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 45c53bf61..a466ed6db 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -5,7 +5,7 @@ def index authorize([:admin, Group]) @editable_groups = group_policy_scope.where(tenant_id: Current.tenant.id).editable - @fixed_groups = group_policy_scope.where(tenant_id: Current.tenant.id).where.not(id: @editable_groups.pluck(:id)) + @non_editable_groups = group_policy_scope.where(tenant_id: Current.tenant.id).where.not(id: @editable_groups.pluck(:id)) end def show @@ -96,7 +96,7 @@ def set_group end def group_params - params.require(:group_custom).permit(:name) + params.require(:custom_group).permit(:name) end def group_policy_scope diff --git a/app/models/group_signer.rb b/app/models/admin_group.rb similarity index 81% rename from app/models/group_signer.rb rename to app/models/admin_group.rb index 573af9e75..6c5cd7c78 100644 --- a/app/models/group_signer.rb +++ b/app/models/admin_group.rb @@ -10,5 +10,8 @@ # updated_at :datetime not null # tenant_id :bigint not null # -class GroupSigner < Group +class AdminGroup < Group + def name + I18n.t("group.names.admin") + end end diff --git a/app/models/group_custom.rb b/app/models/all_group.rb similarity index 82% rename from app/models/group_custom.rb rename to app/models/all_group.rb index ecddfe49b..06c77c9f7 100644 --- a/app/models/group_custom.rb +++ b/app/models/all_group.rb @@ -10,5 +10,8 @@ # updated_at :datetime not null # tenant_id :bigint not null # -class GroupCustom < Group +class AllGroup < Group + def name + I18n.t("group.names.all") + end end diff --git a/app/models/audit_log.rb b/app/models/audit_log.rb index 6ec004c54..1289ca0b2 100644 --- a/app/models/audit_log.rb +++ b/app/models/audit_log.rb @@ -1,3 +1,22 @@ +# == Schema Information +# +# Table name: audit_logs +# +# id :bigint not null, primary key +# actor_name :string +# changeset :jsonb +# happened_at :datetime not null +# new_value :string +# previous_value :string +# thread_id_archived :integer +# thread_title :string +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# actor_id :bigint +# message_thread_id :bigint +# tenant_id :bigint +# require "csv" class AuditLog < ApplicationRecord diff --git a/app/models/group_admin.rb b/app/models/custom_group.rb similarity index 92% rename from app/models/group_admin.rb rename to app/models/custom_group.rb index fe7ff436c..cd83ccae9 100644 --- a/app/models/group_admin.rb +++ b/app/models/custom_group.rb @@ -10,5 +10,5 @@ # updated_at :datetime not null # tenant_id :bigint not null # -class GroupAdmin < Group +class CustomGroup < Group end diff --git a/app/models/group.rb b/app/models/group.rb index 2608eb3f0..19d160d45 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -17,20 +17,26 @@ class Group < ApplicationRecord has_many :tag_groups, dependent: :destroy has_many :tags, through: :tag_groups - scope :editable, -> { where.not(type: %w[GroupAll GroupUser]) } + EDITABLE_GROUP_TYPES = %w[AdminGroup SignerGroup CustomGroup] + + scope :editable, -> { where(type: EDITABLE_GROUP_TYPES) } validates_presence_of :name validates_uniqueness_of :name, scope: :tenant_id def editable? - type.in? %w[GroupAdmin GroupCustom GroupSigner] + type.in? EDITABLE_GROUP_TYPES end def system? - type != GroupCustom.to_s + type != CustomGroup.to_s end def destroyable? !system? end + + def renamable? + !system? + end end diff --git a/app/models/group_user.rb b/app/models/group_user.rb deleted file mode 100644 index c6fea5812..000000000 --- a/app/models/group_user.rb +++ /dev/null @@ -1,14 +0,0 @@ -# == Schema Information -# -# Table name: groups -# -# id :bigint not null, primary key -# group_type :enum -# name :string not null -# type :string not null -# created_at :datetime not null -# updated_at :datetime not null -# tenant_id :bigint not null -# -class GroupUser < Group -end diff --git a/app/models/signer_group.rb b/app/models/signer_group.rb new file mode 100644 index 000000000..a87ba561b --- /dev/null +++ b/app/models/signer_group.rb @@ -0,0 +1,17 @@ +# == Schema Information +# +# Table name: groups +# +# id :bigint not null, primary key +# group_type :enum +# name :string not null +# type :string not null +# created_at :datetime not null +# updated_at :datetime not null +# tenant_id :bigint not null +# +class SignerGroup < Group + def name + I18n.t("group.names.signer") + end +end diff --git a/app/models/tenant.rb b/app/models/tenant.rb index 78b8f3d4e..fb3f9d99d 100644 --- a/app/models/tenant.rb +++ b/app/models/tenant.rb @@ -11,10 +11,10 @@ class Tenant < ApplicationRecord has_many :users, dependent: :destroy has_many :groups, dependent: :destroy - has_one :all_group, class_name: "GroupAll" - has_one :signer_group, class_name: "GroupSigner" - has_one :admin_group, class_name: "GroupAdmin" - has_many :custom_groups, class_name: "GroupCustom" + has_one :all_group + has_one :signer_group + has_one :admin_group + has_many :custom_groups has_many :boxes, dependent: :destroy has_many :automation_rules, class_name: "Automation::Rule", dependent: :destroy @@ -29,7 +29,7 @@ class Tenant < ApplicationRecord def create_default_objects create_all_group!(name: "all") create_admin_group!(name: "admins") - create_signer_group!(name: "Podpisovatelia") + create_signer_group!(name: "signers") tags.create!(name: 'Drafty', system_name: Tag::DRAFT_SYSTEM_NAME, external: false, visible: true) tags.create!(name: 'Na prevzatie', system_name: 'delivery_notification', external: false, visible: true) end diff --git a/app/models/user.rb b/app/models/user.rb index 685547110..7bf81e460 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,11 +30,11 @@ def site_admin? end def admin? - groups.exists?(type: 'GroupAdmin') + groups.exists?(type: "AdminGroup") end def user_group - groups.where(type: 'GroupUser').first + groups.where(type: "UserGroup").first end private @@ -44,7 +44,7 @@ def delete_user_group end def handle_default_groups - groups.create!(name: name, type: 'GroupUser', tenant_id: tenant_id) + groups.create!(name: name, type: "UserGroup", tenant_id: tenant_id) group_memberships.create!(group: tenant.all_group) end end diff --git a/app/models/group_all.rb b/app/models/user_group.rb similarity index 93% rename from app/models/group_all.rb rename to app/models/user_group.rb index 19e3de959..21f27c2b5 100644 --- a/app/models/group_all.rb +++ b/app/models/user_group.rb @@ -10,5 +10,5 @@ # updated_at :datetime not null # tenant_id :bigint not null # -class GroupAll < Group +class UserGroup < Group end diff --git a/app/views/admin/groups/index.html.erb b/app/views/admin/groups/index.html.erb index ac3e4cee0..7e091c0c1 100644 --- a/app/views/admin/groups/index.html.erb +++ b/app/views/admin/groups/index.html.erb @@ -1 +1 @@ -<%= render Admin::Groups::GroupsListComponent.new(editable_groups: @editable_groups, fixed_groups: @fixed_groups) %> +<%= render Admin::Groups::GroupsListComponent.new(editable_groups: @editable_groups, non_editable_groups: @non_editable_groups) %> diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 950c6b690..3b25971c4 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -239,6 +239,11 @@ sk: "Automation::BoxCondition": "je" "Automation::AddMessageThreadTagAction": "Pridaj štítok na vlákno" "Automation::AddTagAction": "Pridaj štítok" + group: + names: + all: "Všetci" + admin: "Administrátori" + signer: "Podpisovatelia" title: "Názov" tag_editing_in_message_threads: one: "Úprava štítkov v jednom vlákne" diff --git a/db/migrate/20231127215006_convert_groups_to_sti.rb b/db/migrate/20231127215006_convert_groups_to_sti.rb index 010162550..b91ba4d1c 100644 --- a/db/migrate/20231127215006_convert_groups_to_sti.rb +++ b/db/migrate/20231127215006_convert_groups_to_sti.rb @@ -4,14 +4,14 @@ def up Group.find_each do |group| type = case group.group_type - when 'ALL' - 'GroupAll' - when 'ADMIN' - 'GroupAdmin' - when 'USER' - 'GroupUser' - when 'CUSTOM' - 'GroupCustom' + when "ALL" + "AllGroup" + when "ADMIN" + "AdminGroup" + when "USER" + "UserGroup" + when "CUSTOM" + "CustomGroup" end group.update_column(:type, type) @@ -22,6 +22,7 @@ def up end def down + change_column_null :groups, :group_type, false remove_column :groups, :type end end diff --git a/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb b/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb index 4e145f542..a11b1a7fc 100644 --- a/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb +++ b/db/migrate/20231127223506_generate_signing_groups_for_existing_tenants.rb @@ -1,11 +1,11 @@ class GenerateSigningGroupsForExistingTenants < ActiveRecord::Migration[7.0] def up Tenant.find_each do |tenant| - tenant.create_signer_group!(name: 'Podpisovatelia') + tenant.create_signer_group!(name: "signers") end end def down - GroupSigner.destroy_all + SignerGroup.destroy_all end end From fd59a7285cbb9e038069d0f1c21ea7c013e1243b Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Tue, 28 Nov 2023 15:03:23 +0100 Subject: [PATCH 5/6] Fix fixtures --- test/fixtures/groups.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/fixtures/groups.yml b/test/fixtures/groups.yml index 575c6fd77..9044e1228 100644 --- a/test/fixtures/groups.yml +++ b/test/fixtures/groups.yml @@ -2,20 +2,20 @@ all: name: all - type: GroupAll + type: AllGroup tenant: ssd admins: name: admins - type: GroupAdmin + type: AdminGroup tenant: ssd basic_user: name: "Basic user" - type: GroupUser + type: UserGroup tenant: ssd solver_admin: name: admins - type: GroupAdmin + type: AdminGroup tenant: solver From 083113d117c1a1c54931c8b05fc0f7dffaac5fde Mon Sep 17 00:00:00 2001 From: Miroslav Hettes Date: Tue, 28 Nov 2023 18:05:19 +0100 Subject: [PATCH 6/6] Simplify method --- app/models/group.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/group.rb b/app/models/group.rb index 19d160d45..0ce00e218 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -29,7 +29,7 @@ def editable? end def system? - type != CustomGroup.to_s + !is_a?(CustomGroup) end def destroyable?