easy-admin-rails 0.1.15 → 0.2.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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/easy_admin.base.js +254 -18
  3. data/app/assets/builds/easy_admin.base.js.map +4 -4
  4. data/app/assets/builds/easy_admin.css +112 -18
  5. data/app/components/easy_admin/base_component.rb +1 -0
  6. data/app/components/easy_admin/form_tabs_component.rb +5 -2
  7. data/app/components/easy_admin/navbar_component.rb +5 -1
  8. data/app/components/easy_admin/permissions/user_role_assignment_component.rb +254 -0
  9. data/app/components/easy_admin/permissions/user_role_permissions_component.rb +186 -0
  10. data/app/components/easy_admin/resources/index_component.rb +1 -4
  11. data/app/components/easy_admin/sidebar_component.rb +67 -2
  12. data/app/controllers/easy_admin/application_controller.rb +131 -1
  13. data/app/controllers/easy_admin/batch_actions_controller.rb +27 -0
  14. data/app/controllers/easy_admin/concerns/belongs_to_editing.rb +201 -0
  15. data/app/controllers/easy_admin/concerns/inline_field_editing.rb +297 -0
  16. data/app/controllers/easy_admin/concerns/resource_authorization.rb +55 -0
  17. data/app/controllers/easy_admin/concerns/resource_filtering.rb +178 -0
  18. data/app/controllers/easy_admin/concerns/resource_loading.rb +149 -0
  19. data/app/controllers/easy_admin/concerns/resource_pagination.rb +135 -0
  20. data/app/controllers/easy_admin/dashboard_controller.rb +2 -1
  21. data/app/controllers/easy_admin/dashboards_controller.rb +6 -40
  22. data/app/controllers/easy_admin/resources_controller.rb +13 -762
  23. data/app/controllers/easy_admin/row_actions_controller.rb +25 -0
  24. data/app/helpers/easy_admin/fields_helper.rb +61 -9
  25. data/app/javascript/easy_admin/controllers/event_emitter_controller.js +2 -4
  26. data/app/javascript/easy_admin/controllers/infinite_scroll_controller.js +0 -10
  27. data/app/javascript/easy_admin/controllers/jsoneditor_controller.js +1 -4
  28. data/app/javascript/easy_admin/controllers/permission_toggle_controller.js +227 -0
  29. data/app/javascript/easy_admin/controllers/role_preview_controller.js +93 -0
  30. data/app/javascript/easy_admin/controllers/select_field_controller.js +1 -2
  31. data/app/javascript/easy_admin/controllers/settings_button_controller.js +1 -2
  32. data/app/javascript/easy_admin/controllers/settings_sidebar_controller.js +1 -4
  33. data/app/javascript/easy_admin/controllers/turbo_stream_redirect.js +0 -2
  34. data/app/javascript/easy_admin/controllers.js +5 -1
  35. data/app/models/easy_admin/admin_user.rb +6 -0
  36. data/app/policies/admin_user_policy.rb +36 -0
  37. data/app/policies/application_policy.rb +83 -0
  38. data/app/views/easy_admin/application/authorization_failure.turbo_stream.erb +8 -0
  39. data/app/views/easy_admin/dashboards/card.html.erb +5 -0
  40. data/app/views/easy_admin/dashboards/card.turbo_stream.erb +7 -0
  41. data/app/views/easy_admin/dashboards/card_error.html.erb +3 -0
  42. data/app/views/easy_admin/dashboards/card_error.turbo_stream.erb +5 -0
  43. data/app/views/easy_admin/dashboards/show.turbo_stream.erb +7 -0
  44. data/app/views/easy_admin/resources/belongs_to_edit_attached.html.erb +6 -0
  45. data/app/views/easy_admin/resources/belongs_to_edit_attached.turbo_stream.erb +8 -0
  46. data/app/views/easy_admin/resources/belongs_to_reattach.html.erb +5 -0
  47. data/app/views/easy_admin/resources/edit.html.erb +1 -1
  48. data/app/views/easy_admin/resources/edit_field.html.erb +5 -0
  49. data/app/views/easy_admin/resources/edit_field.turbo_stream.erb +7 -0
  50. data/app/views/easy_admin/resources/index.html.erb +1 -1
  51. data/app/views/easy_admin/resources/index_frame.html.erb +8 -142
  52. data/app/views/easy_admin/resources/update_belongs_to_attached.turbo_stream.erb +25 -0
  53. data/app/views/layouts/easy_admin/application.html.erb +15 -2
  54. data/config/initializers/easy_admin_permissions.rb +73 -0
  55. data/db/seeds/easy_admin_permissions.rb +121 -0
  56. data/lib/easy-admin-rails.rb +2 -0
  57. data/lib/easy_admin/permissions/component.rb +168 -0
  58. data/lib/easy_admin/permissions/configuration.rb +37 -0
  59. data/lib/easy_admin/permissions/controller.rb +164 -0
  60. data/lib/easy_admin/permissions/dsl.rb +160 -0
  61. data/lib/easy_admin/permissions/models.rb +44 -0
  62. data/lib/easy_admin/permissions/permission_denied_component.rb +121 -0
  63. data/lib/easy_admin/permissions/resource_permissions.rb +231 -0
  64. data/lib/easy_admin/permissions/role_definition.rb +45 -0
  65. data/lib/easy_admin/permissions/role_denied_component.rb +159 -0
  66. data/lib/easy_admin/permissions/role_dsl.rb +73 -0
  67. data/lib/easy_admin/permissions/user_extensions.rb +129 -0
  68. data/lib/easy_admin/permissions.rb +113 -0
  69. data/lib/easy_admin/resource/base.rb +119 -0
  70. data/lib/easy_admin/resource/configuration.rb +148 -0
  71. data/lib/easy_admin/resource/dsl.rb +117 -0
  72. data/lib/easy_admin/resource/field_registry.rb +189 -0
  73. data/lib/easy_admin/resource/form_builder.rb +123 -0
  74. data/lib/easy_admin/resource/layout_builder.rb +249 -0
  75. data/lib/easy_admin/resource/scope_manager.rb +252 -0
  76. data/lib/easy_admin/resource/show_builder.rb +359 -0
  77. data/lib/easy_admin/resource.rb +8 -835
  78. data/lib/easy_admin/resource_modules.rb +11 -0
  79. data/lib/easy_admin/version.rb +1 -1
  80. data/lib/generators/easy_admin/permissions/install_generator.rb +90 -0
  81. data/lib/generators/easy_admin/permissions/templates/initializers/permissions.rb +37 -0
  82. data/lib/generators/easy_admin/permissions/templates/migrations/create_permission_tables.rb +27 -0
  83. data/lib/generators/easy_admin/permissions/templates/migrations/update_users_for_permissions.rb +6 -0
  84. data/lib/generators/easy_admin/permissions/templates/models/permission.rb +9 -0
  85. data/lib/generators/easy_admin/permissions/templates/models/role.rb +9 -0
  86. data/lib/generators/easy_admin/permissions/templates/models/role_permission.rb +9 -0
  87. data/lib/generators/easy_admin/permissions/templates/models/user_role.rb +9 -0
  88. data/lib/generators/easy_admin/permissions/templates/policies/application_policy.rb +47 -0
  89. data/lib/generators/easy_admin/permissions/templates/policies/user_policy.rb +36 -0
  90. data/lib/generators/easy_admin/permissions/templates/seeds/permissions.rb +89 -0
  91. metadata +62 -5
  92. data/db/migrate/20250101000001_create_easy_admin_admin_users.rb +0 -45
@@ -0,0 +1,11 @@
1
+ # Autoloader for all resource modules
2
+ # This file ensures all resource modules are loaded in the correct order
3
+
4
+ require_relative 'resource/configuration'
5
+ require_relative 'resource/field_registry'
6
+ require_relative 'resource/scope_manager'
7
+ require_relative 'resource/layout_builder'
8
+ require_relative 'resource/form_builder'
9
+ require_relative 'resource/show_builder'
10
+ require_relative 'resource/dsl'
11
+ require_relative 'resource/base'
@@ -1,3 +1,3 @@
1
1
  module EasyAdmin
2
- VERSION = "0.1.15"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,90 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module EasyAdmin
4
+ module Permissions
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include ActiveRecord::Generators::Migration
8
+
9
+ source_root File.expand_path('templates', __dir__)
10
+
11
+ desc 'Install EasyAdmin Permission Engine'
12
+
13
+ class_option :user_model, type: :string, default: 'User',
14
+ desc: 'The name of your user model'
15
+ class_option :contexts, type: :array, default: [],
16
+ desc: 'Context types for scoped permissions (e.g., Organization Project)'
17
+
18
+ def create_models
19
+ template 'models/role.rb', 'app/models/easy_admin/permissions/role.rb'
20
+ template 'models/user_role.rb', 'app/models/easy_admin/permissions/user_role.rb'
21
+ # No permission or role_permission models needed - using JSON field approach
22
+ end
23
+
24
+ def create_migrations
25
+ migration_template 'migrations/create_permission_tables.rb',
26
+ 'db/migrate/create_easy_admin_permission_tables.rb'
27
+
28
+ if options[:user_model] != 'User' || has_user_model_changes?
29
+ migration_template 'migrations/update_users_for_permissions.rb',
30
+ 'db/migrate/update_users_for_easy_admin_permissions.rb'
31
+ end
32
+ end
33
+
34
+ def create_initializer
35
+ template 'initializers/permissions.rb', 'config/initializers/easy_admin_permissions.rb'
36
+ end
37
+
38
+ def create_base_policy
39
+ template 'policies/application_policy.rb', 'app/policies/application_policy.rb'
40
+ template 'policies/user_policy.rb', "app/policies/#{options[:user_model].underscore}_policy.rb"
41
+ end
42
+
43
+ def update_user_model
44
+ inject_into_class "app/models/#{options[:user_model].underscore}.rb", options[:user_model].classify do
45
+ " include EasyAdmin::Permissions::UserExtensions\n"
46
+ end
47
+ end
48
+
49
+ def create_seeds
50
+ template 'seeds/permissions.rb', 'db/seeds/easy_admin_permissions.rb'
51
+ end
52
+
53
+ def show_instructions
54
+ say "\n" + "="*60
55
+ say "EasyAdmin Permission Engine installed successfully!"
56
+ say "="*60
57
+ say "\nNext steps:"
58
+ say "1. Run: rails db:migrate"
59
+ say "2. Add to your seeds: load Rails.root.join('db/seeds/easy_admin_permissions.rb')"
60
+ say "3. Run: rails db:seed"
61
+ say "4. Configure permissions in config/initializers/easy_admin_permissions.rb"
62
+ say "5. Add action_policy gem to your Gemfile: gem 'action_policy'"
63
+ say "6. Run: bundle install"
64
+ say "\nFor more information, see the documentation."
65
+ say "="*60 + "\n"
66
+ end
67
+
68
+ private
69
+
70
+ def migration_version
71
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
72
+ end
73
+
74
+ def user_model_name
75
+ options[:user_model]
76
+ end
77
+
78
+ def context_types
79
+ options[:contexts]
80
+ end
81
+
82
+ def has_user_model_changes?
83
+ # Check if we need to add permissions_cache column
84
+ !File.exist?("app/models/#{options[:user_model].underscore}.rb") ||
85
+ !File.read("app/models/#{options[:user_model].underscore}.rb").include?('permissions_cache')
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,37 @@
1
+ # Configure EasyAdmin Permissions
2
+ EasyAdmin::Permissions.configure do |config|
3
+ config.enabled = true
4
+ config.cache_duration = 1.hour
5
+ end
6
+
7
+ # Define roles (permissions are managed individually via JSON field)
8
+ # Note: This will only run if the database tables exist
9
+ if ActiveRecord::Base.connection.table_exists?(:easy_admin_roles)
10
+ EasyAdmin::Permissions.define do
11
+ # Role definitions - just name, slug, and description
12
+ # Individual permissions are managed via users.permissions_cache JSON field
13
+
14
+ role :super_admin,
15
+ description: "Full system access - all permissions can be granted individually"
16
+
17
+ role :admin,
18
+ description: "Administrative access - permissions managed per user"
19
+
20
+ role :moderator,
21
+ description: "Content moderation access"
22
+
23
+ role :editor,
24
+ description: "Content editing permissions"
25
+
26
+ role :viewer,
27
+ description: "Read-only access"
28
+ end
29
+ end
30
+
31
+ # Individual user permissions are managed via the permissions_cache JSON field
32
+ # Example permissions that can be assigned:
33
+ # - admin_users:read, admin_users:create, admin_users:update, admin_users:delete
34
+ # - posts:read, posts:create, posts:update, posts:delete
35
+ # - comments:read, comments:create, comments:update, comments:delete
36
+ # - users:read, users:create, users:update, users:delete
37
+ # - payment_methods:read, payment_methods:create, payment_methods:update, payment_methods:delete
@@ -0,0 +1,27 @@
1
+ class CreateEasyAdminPermissionTables < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ # Roles table - only table needed, permissions are stored in JSON field
4
+ create_table :easy_admin_roles do |t|
5
+ t.string :name, null: false
6
+ t.string :slug, null: false
7
+ t.string :description
8
+ t.boolean :active, default: true
9
+ t.timestamps
10
+
11
+ t.index :name, unique: true
12
+ t.index :slug, unique: true
13
+ t.index :active
14
+ end
15
+
16
+ # User-Role join table (simplified - no permissions table needed)
17
+ create_table :easy_admin_user_roles do |t|
18
+ t.references :user, null: false, foreign_key: true
19
+ t.references :role, null: false, foreign_key: { to_table: :easy_admin_roles }
20
+ t.boolean :active, default: true
21
+ t.timestamps
22
+
23
+ t.index [:user_id, :role_id], unique: true, name: 'index_easy_admin_user_roles_unique'
24
+ t.index [:user_id, :active], name: 'index_easy_admin_user_roles_active'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ class UpdateUsersForEasyAdminPermissions < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ add_column :<%= user_model_name.tableize %>, :permissions_cache, :json, default: {}, null: false
4
+ add_index :<%= user_model_name.tableize %>, :permissions_cache, using: :gin
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module EasyAdmin
2
+ module Permissions
3
+ class Permission < ApplicationRecord
4
+ include EasyAdmin::Permissions::Models::Permission
5
+
6
+ self.table_name = 'easy_admin_permissions'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module EasyAdmin
2
+ module Permissions
3
+ class Role < ApplicationRecord
4
+ include EasyAdmin::Permissions::Models::Role
5
+
6
+ self.table_name = 'easy_admin_roles'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module EasyAdmin
2
+ module Permissions
3
+ class RolePermission < ApplicationRecord
4
+ include EasyAdmin::Permissions::Models::RolePermission
5
+
6
+ self.table_name = 'easy_admin_role_permissions'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module EasyAdmin
2
+ module Permissions
3
+ class UserRole < ApplicationRecord
4
+ include EasyAdmin::Permissions::Models::UserRole
5
+
6
+ self.table_name = 'easy_admin_user_roles'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,47 @@
1
+ class ApplicationPolicy < ActionPolicy::Base
2
+ # Configure authorization context
3
+ authorize :user, allow_nil: true
4
+
5
+ # Default rule delegates to EasyAdmin permissions
6
+ default_rule :manage?, with: :admin_user?
7
+
8
+ # Basic authorization rules using EasyAdmin permissions
9
+ def index?
10
+ user_has_permission?("#{resource_name}:read")
11
+ end
12
+
13
+ def show?
14
+ user_has_permission?("#{resource_name}:read")
15
+ end
16
+
17
+ def create?
18
+ user_has_permission?("#{resource_name}:create")
19
+ end
20
+
21
+ def update?
22
+ user_has_permission?("#{resource_name}:update")
23
+ end
24
+
25
+ def destroy?
26
+ user_has_permission?("#{resource_name}:delete")
27
+ end
28
+
29
+ # Admin bypass
30
+ def manage?
31
+ admin_user?
32
+ end
33
+
34
+ private
35
+
36
+ def user_has_permission?(permission_name, context: nil)
37
+ EasyAdmin::Permissions.authorized?(user, permission_name, context: context)
38
+ end
39
+
40
+ def admin_user?
41
+ user&.admin? || false
42
+ end
43
+
44
+ def resource_name
45
+ record.class.name.underscore.pluralize
46
+ end
47
+ end
@@ -0,0 +1,36 @@
1
+ class <%= user_model_name %>Policy < ApplicationPolicy
2
+ # Users can always view their own profile
3
+ def show?
4
+ own_record? || super
5
+ end
6
+
7
+ # Users can update their own basic information
8
+ def update?
9
+ own_record? || super
10
+ end
11
+
12
+ # Only users with permissions can create other users
13
+ def create?
14
+ user_has_permission?("users:create")
15
+ end
16
+
17
+ # Only users with permissions can delete other users
18
+ def destroy?
19
+ !own_record? && user_has_permission?("users:delete")
20
+ end
21
+
22
+ # Role management permissions
23
+ def assign_roles?
24
+ user_has_permission?("users:manage_roles")
25
+ end
26
+
27
+ def remove_roles?
28
+ user_has_permission?("users:manage_roles")
29
+ end
30
+
31
+ private
32
+
33
+ def own_record?
34
+ user && record && user.id == record.id
35
+ end
36
+ end
@@ -0,0 +1,89 @@
1
+ # EasyAdmin Permission System Seeds
2
+ # Load these seeds after running: rails easy_admin:permissions:install
3
+
4
+ puts "🔐 Setting up EasyAdmin Permission System..."
5
+
6
+ # Auto-discover and seed all EasyAdmin resource permissions
7
+ puts " Auto-discovering EasyAdmin resources..."
8
+ resource_permission_count = EasyAdmin::Permissions.seed_resource_permissions!
9
+
10
+ # Define roles using the new DSL with resource-based permissions
11
+ puts " Creating roles with EasyAdmin resource permissions..."
12
+
13
+ EasyAdmin::Permissions.define do
14
+ # Auto-discover all available resources and create permissions
15
+ auto_discover_resources
16
+
17
+ # Define roles with resource-based permissions
18
+ easy_admin_role "Super Admin",
19
+ slug: "super_admin",
20
+ description: "Full system access to all resources",
21
+ resources: {
22
+ user: [:index, :show, :new, :create, :edit, :update, :destroy],
23
+ admin_user: [:index, :show, :new, :create, :edit, :update, :destroy],
24
+ post: [:index, :show, :new, :create, :edit, :update, :destroy],
25
+ comment: [:index, :show, :new, :create, :edit, :update, :destroy],
26
+ category: [:index, :show, :new, :create, :edit, :update, :destroy],
27
+ payment_method: [:index, :show, :new, :create, :edit, :update, :destroy]
28
+ }
29
+
30
+ easy_admin_role "Admin",
31
+ slug: "admin",
32
+ description: "Administrative access with user management",
33
+ resources: {
34
+ user: [:index, :show, :edit, :update],
35
+ admin_user: [:index, :show, :new, :create, :edit, :update],
36
+ post: [:index, :show, :new, :create, :edit, :update, :destroy],
37
+ comment: [:index, :show, :edit, :update, :destroy],
38
+ category: [:index, :show, :new, :create, :edit, :update],
39
+ payment_method: [:index, :show]
40
+ }
41
+
42
+ easy_admin_role "Manager",
43
+ slug: "manager",
44
+ description: "Content management with limited user access",
45
+ resources: {
46
+ user: [:index, :show],
47
+ post: [:index, :show, :new, :create, :edit, :update],
48
+ comment: [:index, :show, :edit, :update],
49
+ category: [:index, :show, :new, :create, :edit, :update],
50
+ payment_method: [:index, :show]
51
+ }
52
+
53
+ easy_admin_role "Editor",
54
+ slug: "editor",
55
+ description: "Content editing permissions",
56
+ resources: {
57
+ post: [:index, :show, :new, :create, :edit, :update],
58
+ comment: [:index, :show, :edit, :update],
59
+ category: [:index, :show]
60
+ }
61
+
62
+ easy_admin_role "Viewer",
63
+ slug: "viewer",
64
+ description: "Read-only access to resources",
65
+ resources: {
66
+ user: [:index, :show],
67
+ post: [:index, :show],
68
+ comment: [:index, :show],
69
+ category: [:index, :show],
70
+ payment_method: [:index, :show]
71
+ }
72
+ end
73
+
74
+ puts "✅ EasyAdmin Permission System setup complete!"
75
+ puts " - #{resource_permission_count} resource permissions created"
76
+ puts " - 5 roles created with resource-based permissions"
77
+ puts ""
78
+ puts "Available resources discovered:"
79
+ EasyAdmin::Permissions.available_resources.each do |resource|
80
+ actions = EasyAdmin::Permissions.actions_for_resource(resource)
81
+ puts " - #{resource}: #{actions.join(', ')}"
82
+ end
83
+ puts ""
84
+ puts "Next steps:"
85
+ puts "1. Configure permissions in config/initializers/easy_admin_permissions.rb"
86
+ puts "2. Assign roles to users: user.assign_role(:admin)"
87
+ puts "3. Check permissions: user.has_permission?('users:index')"
88
+ puts "4. Use in Action Policy: authorize!(record, to: :show?)"
89
+ puts ""
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-admin-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Slaurmagan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-09-03 00:00:00.000000000 Z
11
+ date: 2025-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -269,6 +269,8 @@ files:
269
269
  - app/components/easy_admin/navbar_component.rb
270
270
  - app/components/easy_admin/notification_component.rb
271
271
  - app/components/easy_admin/pagination_component.rb
272
+ - app/components/easy_admin/permissions/user_role_assignment_component.rb
273
+ - app/components/easy_admin/permissions/user_role_permissions_component.rb
272
274
  - app/components/easy_admin/quick_filters_component.rb
273
275
  - app/components/easy_admin/resource_pagination_component.rb
274
276
  - app/components/easy_admin/resources/index_component.rb
@@ -292,6 +294,12 @@ files:
292
294
  - app/concerns/easy_admin/resource_versions.rb
293
295
  - app/controllers/easy_admin/application_controller.rb
294
296
  - app/controllers/easy_admin/batch_actions_controller.rb
297
+ - app/controllers/easy_admin/concerns/belongs_to_editing.rb
298
+ - app/controllers/easy_admin/concerns/inline_field_editing.rb
299
+ - app/controllers/easy_admin/concerns/resource_authorization.rb
300
+ - app/controllers/easy_admin/concerns/resource_filtering.rb
301
+ - app/controllers/easy_admin/concerns/resource_loading.rb
302
+ - app/controllers/easy_admin/concerns/resource_pagination.rb
295
303
  - app/controllers/easy_admin/confirmation_modal_controller.rb
296
304
  - app/controllers/easy_admin/dashboard_controller.rb
297
305
  - app/controllers/easy_admin/dashboards_controller.rb
@@ -328,6 +336,8 @@ files:
328
336
  - app/javascript/easy_admin/controllers/modal_controller.js
329
337
  - app/javascript/easy_admin/controllers/navbar_scroll_controller.js
330
338
  - app/javascript/easy_admin/controllers/notification_controller.js
339
+ - app/javascript/easy_admin/controllers/permission_toggle_controller.js
340
+ - app/javascript/easy_admin/controllers/role_preview_controller.js
331
341
  - app/javascript/easy_admin/controllers/row_action_controller.js
332
342
  - app/javascript/easy_admin/controllers/row_modal_controller.js
333
343
  - app/javascript/easy_admin/controllers/select_field_controller.js
@@ -343,29 +353,44 @@ files:
343
353
  - app/javascript/easy_admin/controllers/version_revert_controller.js
344
354
  - app/models/easy_admin/admin_user.rb
345
355
  - app/models/easy_admin/application_record.rb
356
+ - app/policies/admin_user_policy.rb
357
+ - app/policies/application_policy.rb
358
+ - app/views/easy_admin/application/authorization_failure.turbo_stream.erb
346
359
  - app/views/easy_admin/dashboard/index.html.erb
360
+ - app/views/easy_admin/dashboards/card.html.erb
361
+ - app/views/easy_admin/dashboards/card.turbo_stream.erb
362
+ - app/views/easy_admin/dashboards/card_error.html.erb
363
+ - app/views/easy_admin/dashboards/card_error.turbo_stream.erb
347
364
  - app/views/easy_admin/dashboards/show.html.erb
365
+ - app/views/easy_admin/dashboards/show.turbo_stream.erb
348
366
  - app/views/easy_admin/passwords/edit.html.erb
349
367
  - app/views/easy_admin/passwords/new.html.erb
350
368
  - app/views/easy_admin/registrations/new.html.erb
351
369
  - app/views/easy_admin/resources/_redirect.turbo_stream.erb
352
370
  - app/views/easy_admin/resources/_table_rows.html.erb
371
+ - app/views/easy_admin/resources/belongs_to_edit_attached.html.erb
372
+ - app/views/easy_admin/resources/belongs_to_edit_attached.turbo_stream.erb
373
+ - app/views/easy_admin/resources/belongs_to_reattach.html.erb
353
374
  - app/views/easy_admin/resources/edit.html.erb
375
+ - app/views/easy_admin/resources/edit_field.html.erb
376
+ - app/views/easy_admin/resources/edit_field.turbo_stream.erb
354
377
  - app/views/easy_admin/resources/index.html.erb
355
378
  - app/views/easy_admin/resources/index.turbo_stream.erb
356
379
  - app/views/easy_admin/resources/index_frame.html.erb
357
380
  - app/views/easy_admin/resources/new.html.erb
358
381
  - app/views/easy_admin/resources/show.html.erb
382
+ - app/views/easy_admin/resources/update_belongs_to_attached.turbo_stream.erb
359
383
  - app/views/easy_admin/sessions/new.html.erb
360
384
  - app/views/easy_admin/settings/_form.html.erb
361
385
  - app/views/easy_admin/settings/index.html.erb
362
386
  - app/views/layouts/easy_admin/application.html.erb
363
387
  - app/views/layouts/easy_admin/auth.html.erb
364
388
  - config/initializers/easy_admin_card_factory.rb
389
+ - config/initializers/easy_admin_permissions.rb
365
390
  - config/initializers/pagy.rb
366
391
  - config/initializers/rack_mini_profiler.rb
367
392
  - config/routes.rb
368
- - db/migrate/20250101000001_create_easy_admin_admin_users.rb
393
+ - db/seeds/easy_admin_permissions.rb
369
394
  - lib/easy-admin-rails.rb
370
395
  - lib/easy_admin/action.rb
371
396
  - lib/easy_admin/batch_action.rb
@@ -375,7 +400,28 @@ files:
375
400
  - lib/easy_admin/delete_action.rb
376
401
  - lib/easy_admin/engine.rb
377
402
  - lib/easy_admin/field.rb
403
+ - lib/easy_admin/permissions.rb
404
+ - lib/easy_admin/permissions/component.rb
405
+ - lib/easy_admin/permissions/configuration.rb
406
+ - lib/easy_admin/permissions/controller.rb
407
+ - lib/easy_admin/permissions/dsl.rb
408
+ - lib/easy_admin/permissions/models.rb
409
+ - lib/easy_admin/permissions/permission_denied_component.rb
410
+ - lib/easy_admin/permissions/resource_permissions.rb
411
+ - lib/easy_admin/permissions/role_definition.rb
412
+ - lib/easy_admin/permissions/role_denied_component.rb
413
+ - lib/easy_admin/permissions/role_dsl.rb
414
+ - lib/easy_admin/permissions/user_extensions.rb
378
415
  - lib/easy_admin/resource.rb
416
+ - lib/easy_admin/resource/base.rb
417
+ - lib/easy_admin/resource/configuration.rb
418
+ - lib/easy_admin/resource/dsl.rb
419
+ - lib/easy_admin/resource/field_registry.rb
420
+ - lib/easy_admin/resource/form_builder.rb
421
+ - lib/easy_admin/resource/layout_builder.rb
422
+ - lib/easy_admin/resource/scope_manager.rb
423
+ - lib/easy_admin/resource/show_builder.rb
424
+ - lib/easy_admin/resource_modules.rb
379
425
  - lib/easy_admin/resource_registry.rb
380
426
  - lib/easy_admin/types/json_type.rb
381
427
  - lib/easy_admin/version.rb
@@ -386,6 +432,17 @@ files:
386
432
  - lib/generators/easy_admin/card/templates/card_component_spec.rb.erb
387
433
  - lib/generators/easy_admin/install/templates/easy_admin.rb
388
434
  - lib/generators/easy_admin/install_generator.rb
435
+ - lib/generators/easy_admin/permissions/install_generator.rb
436
+ - lib/generators/easy_admin/permissions/templates/initializers/permissions.rb
437
+ - lib/generators/easy_admin/permissions/templates/migrations/create_permission_tables.rb
438
+ - lib/generators/easy_admin/permissions/templates/migrations/update_users_for_permissions.rb
439
+ - lib/generators/easy_admin/permissions/templates/models/permission.rb
440
+ - lib/generators/easy_admin/permissions/templates/models/role.rb
441
+ - lib/generators/easy_admin/permissions/templates/models/role_permission.rb
442
+ - lib/generators/easy_admin/permissions/templates/models/user_role.rb
443
+ - lib/generators/easy_admin/permissions/templates/policies/application_policy.rb
444
+ - lib/generators/easy_admin/permissions/templates/policies/user_policy.rb
445
+ - lib/generators/easy_admin/permissions/templates/seeds/permissions.rb
389
446
  - lib/generators/easy_admin/rbac/rbac_generator.rb
390
447
  - lib/generators/easy_admin/rbac/templates/add_rbac_to_admin_users.rb
391
448
  - lib/generators/easy_admin/rbac/templates/super_admin.rb
@@ -403,8 +460,8 @@ licenses:
403
460
  metadata:
404
461
  allowed_push_host: https://rubygems.org
405
462
  homepage_uri: https://github.com/yourusername/easy_admin
406
- source_code_uri: https://github.com/yourusername/easy_admin
407
- changelog_uri: https://github.com/yourusername/easy_admin/blob/main/CHANGELOG.md
463
+ source_code_uri: https://github.com/Slaurmagan/easy-admin
464
+ changelog_uri: https://github.com/Slaurmagan/easy-admin/blob/main/CHANGELOG.md
408
465
  post_install_message:
409
466
  rdoc_options: []
410
467
  require_paths:
@@ -1,45 +0,0 @@
1
- class CreateEasyAdminAdminUsers < ActiveRecord::Migration[7.0]
2
- def change
3
- create_table :easy_admin_admin_users do |t|
4
- ## Database authenticatable
5
- t.string :email, null: false, default: ""
6
- t.string :encrypted_password, null: false, default: ""
7
-
8
- ## Personal information
9
- t.string :first_name, null: false
10
- t.string :last_name, null: false
11
-
12
- ## Recoverable
13
- t.string :reset_password_token
14
- t.datetime :reset_password_sent_at
15
-
16
- ## Rememberable
17
- t.datetime :remember_created_at
18
-
19
- ## Trackable
20
- t.integer :sign_in_count, default: 0, null: false
21
- t.datetime :current_sign_in_at
22
- t.datetime :last_sign_in_at
23
- t.string :current_sign_in_ip
24
- t.string :last_sign_in_ip
25
-
26
- ## Confirmable
27
- t.string :confirmation_token
28
- t.datetime :confirmed_at
29
- t.datetime :confirmation_sent_at
30
- t.string :unconfirmed_email # Only if using reconfirmable
31
-
32
- ## Lockable
33
- t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
34
- t.string :unlock_token # Only if unlock strategy is :email or :both
35
- t.datetime :locked_at
36
-
37
- t.timestamps null: false
38
- end
39
-
40
- add_index :easy_admin_admin_users, :email, unique: true
41
- add_index :easy_admin_admin_users, :reset_password_token, unique: true
42
- add_index :easy_admin_admin_users, :confirmation_token, unique: true
43
- add_index :easy_admin_admin_users, :unlock_token, unique: true
44
- end
45
- end