rsb-admin 0.9.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.
- checksums.yaml +7 -0
- data/LICENSE +15 -0
- data/README.md +83 -0
- data/Rakefile +25 -0
- data/app/assets/javascripts/rsb/admin/themes/modern.js +37 -0
- data/app/assets/stylesheets/rsb/admin/themes/default.css +1358 -0
- data/app/assets/stylesheets/rsb/admin/themes/modern.css +1370 -0
- data/app/controllers/concerns/rsb/admin/authorization.rb +21 -0
- data/app/controllers/rsb/admin/admin_controller.rb +138 -0
- data/app/controllers/rsb/admin/admin_users_controller.rb +110 -0
- data/app/controllers/rsb/admin/dashboard_controller.rb +76 -0
- data/app/controllers/rsb/admin/profile_controller.rb +146 -0
- data/app/controllers/rsb/admin/profile_sessions_controller.rb +45 -0
- data/app/controllers/rsb/admin/resources_controller.rb +386 -0
- data/app/controllers/rsb/admin/roles_controller.rb +99 -0
- data/app/controllers/rsb/admin/sessions_controller.rb +139 -0
- data/app/controllers/rsb/admin/settings_controller.rb +203 -0
- data/app/controllers/rsb/admin/two_factor_controller.rb +105 -0
- data/app/helpers/rsb/admin/authorization_helper.rb +49 -0
- data/app/helpers/rsb/admin/branding_helper.rb +38 -0
- data/app/helpers/rsb/admin/formatting_helper.rb +205 -0
- data/app/helpers/rsb/admin/i18n_helper.rb +148 -0
- data/app/helpers/rsb/admin/icons_helper.rb +55 -0
- data/app/helpers/rsb/admin/table_helper.rb +132 -0
- data/app/helpers/rsb/admin/theme_helper.rb +84 -0
- data/app/helpers/rsb/admin/url_helper.rb +109 -0
- data/app/mailers/rsb/admin/admin_mailer.rb +37 -0
- data/app/models/rsb/admin/admin_session.rb +109 -0
- data/app/models/rsb/admin/admin_user.rb +153 -0
- data/app/models/rsb/admin/application_record.rb +10 -0
- data/app/models/rsb/admin/role.rb +63 -0
- data/app/views/layouts/rsb/admin/application.html.erb +45 -0
- data/app/views/rsb/admin/admin_mailer/email_verification.html.erb +11 -0
- data/app/views/rsb/admin/admin_mailer/email_verification.text.erb +11 -0
- data/app/views/rsb/admin/admin_users/_form.html.erb +52 -0
- data/app/views/rsb/admin/admin_users/edit.html.erb +10 -0
- data/app/views/rsb/admin/admin_users/index.html.erb +77 -0
- data/app/views/rsb/admin/admin_users/new.html.erb +10 -0
- data/app/views/rsb/admin/admin_users/show.html.erb +85 -0
- data/app/views/rsb/admin/dashboard/index.html.erb +36 -0
- data/app/views/rsb/admin/profile/edit.html.erb +67 -0
- data/app/views/rsb/admin/profile/show.html.erb +155 -0
- data/app/views/rsb/admin/resources/_filters.html.erb +58 -0
- data/app/views/rsb/admin/resources/_form.html.erb +20 -0
- data/app/views/rsb/admin/resources/_pagination.html.erb +33 -0
- data/app/views/rsb/admin/resources/_table.html.erb +70 -0
- data/app/views/rsb/admin/resources/edit.html.erb +7 -0
- data/app/views/rsb/admin/resources/index.html.erb +49 -0
- data/app/views/rsb/admin/resources/new.html.erb +7 -0
- data/app/views/rsb/admin/resources/page.html.erb +9 -0
- data/app/views/rsb/admin/resources/show.html.erb +55 -0
- data/app/views/rsb/admin/roles/_form.html.erb +197 -0
- data/app/views/rsb/admin/roles/edit.html.erb +7 -0
- data/app/views/rsb/admin/roles/index.html.erb +71 -0
- data/app/views/rsb/admin/roles/new.html.erb +7 -0
- data/app/views/rsb/admin/roles/show.html.erb +99 -0
- data/app/views/rsb/admin/sessions/new.html.erb +31 -0
- data/app/views/rsb/admin/sessions/two_factor.html.erb +39 -0
- data/app/views/rsb/admin/settings/_field.html.erb +115 -0
- data/app/views/rsb/admin/settings/index.html.erb +61 -0
- data/app/views/rsb/admin/shared/_badge.html.erb +1 -0
- data/app/views/rsb/admin/shared/_breadcrumbs.html.erb +12 -0
- data/app/views/rsb/admin/shared/_empty_state.html.erb +4 -0
- data/app/views/rsb/admin/shared/_flash.html.erb +22 -0
- data/app/views/rsb/admin/shared/_header.html.erb +50 -0
- data/app/views/rsb/admin/shared/_page_tabs.html.erb +21 -0
- data/app/views/rsb/admin/shared/_sidebar.html.erb +99 -0
- data/app/views/rsb/admin/shared/disabled.html.erb +38 -0
- data/app/views/rsb/admin/shared/fields/_checkbox.html.erb +6 -0
- data/app/views/rsb/admin/shared/fields/_datetime.html.erb +10 -0
- data/app/views/rsb/admin/shared/fields/_email.html.erb +10 -0
- data/app/views/rsb/admin/shared/fields/_hidden.html.erb +1 -0
- data/app/views/rsb/admin/shared/fields/_json.html.erb +11 -0
- data/app/views/rsb/admin/shared/fields/_number.html.erb +10 -0
- data/app/views/rsb/admin/shared/fields/_password.html.erb +10 -0
- data/app/views/rsb/admin/shared/fields/_select.html.erb +12 -0
- data/app/views/rsb/admin/shared/fields/_text.html.erb +10 -0
- data/app/views/rsb/admin/shared/fields/_textarea.html.erb +10 -0
- data/app/views/rsb/admin/shared/forbidden.html.erb +22 -0
- data/app/views/rsb/admin/themes/modern/views/shared/_header.html.erb +77 -0
- data/app/views/rsb/admin/themes/modern/views/shared/_sidebar.html.erb +135 -0
- data/app/views/rsb/admin/two_factor/backup_codes.html.erb +48 -0
- data/app/views/rsb/admin/two_factor/new.html.erb +53 -0
- data/config/locales/en.yml +140 -0
- data/config/locales/seo.en.yml +21 -0
- data/config/routes.rb +59 -0
- data/db/migrate/20260208000003_create_rsb_admin_tables.rb +43 -0
- data/db/migrate/20260214000001_add_otp_fields_to_rsb_admin_admin_users.rb +9 -0
- data/lib/generators/rsb/admin/install/install_generator.rb +45 -0
- data/lib/generators/rsb/admin/install/templates/rsb_admin_seeds.rb +24 -0
- data/lib/generators/rsb/admin/theme/templates/theme.css.tt +66 -0
- data/lib/generators/rsb/admin/theme/theme_generator.rb +218 -0
- data/lib/generators/rsb/admin/views/views_generator.rb +262 -0
- data/lib/rsb/admin/breadcrumb_item.rb +26 -0
- data/lib/rsb/admin/category_registration.rb +177 -0
- data/lib/rsb/admin/column_definition.rb +89 -0
- data/lib/rsb/admin/configuration.rb +69 -0
- data/lib/rsb/admin/engine.rb +34 -0
- data/lib/rsb/admin/filter_definition.rb +129 -0
- data/lib/rsb/admin/form_field_definition.rb +96 -0
- data/lib/rsb/admin/icons.rb +95 -0
- data/lib/rsb/admin/page_registration.rb +140 -0
- data/lib/rsb/admin/registry.rb +109 -0
- data/lib/rsb/admin/resource_dsl_context.rb +139 -0
- data/lib/rsb/admin/resource_registration.rb +287 -0
- data/lib/rsb/admin/settings_schema.rb +60 -0
- data/lib/rsb/admin/test_kit/helpers.rb +316 -0
- data/lib/rsb/admin/test_kit/resource_test_case.rb +193 -0
- data/lib/rsb/admin/test_kit.rb +11 -0
- data/lib/rsb/admin/theme_definition.rb +46 -0
- data/lib/rsb/admin/themes/modern.rb +44 -0
- data/lib/rsb/admin/version.rb +9 -0
- data/lib/rsb/admin.rb +177 -0
- data/lib/tasks/rsb/admin_tasks.rake +23 -0
- metadata +227 -0
data/lib/rsb/admin.rb
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rsb/settings'
|
|
4
|
+
require 'rotp'
|
|
5
|
+
require 'rqrcode'
|
|
6
|
+
require 'rsb/admin/version'
|
|
7
|
+
require 'rsb/admin/engine'
|
|
8
|
+
require 'rsb/admin/configuration'
|
|
9
|
+
require 'rsb/admin/registry'
|
|
10
|
+
require 'rsb/admin/resource_registration'
|
|
11
|
+
require 'rsb/admin/category_registration'
|
|
12
|
+
require 'rsb/admin/column_definition'
|
|
13
|
+
require 'rsb/admin/filter_definition'
|
|
14
|
+
require 'rsb/admin/form_field_definition'
|
|
15
|
+
require 'rsb/admin/page_registration'
|
|
16
|
+
require 'rsb/admin/resource_dsl_context'
|
|
17
|
+
require 'rsb/admin/breadcrumb_item'
|
|
18
|
+
require 'rsb/admin/theme_definition'
|
|
19
|
+
require 'rsb/admin/settings_schema'
|
|
20
|
+
require 'rsb/admin/icons'
|
|
21
|
+
require 'rsb/admin/themes/modern'
|
|
22
|
+
|
|
23
|
+
module RSB
|
|
24
|
+
module Admin
|
|
25
|
+
class << self
|
|
26
|
+
def registry
|
|
27
|
+
@registry ||= Registry.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def configure
|
|
31
|
+
yield(configuration)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def configuration
|
|
35
|
+
@configuration ||= Configuration.new
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def settings_schema
|
|
39
|
+
@settings_schema ||= SettingsSchema.build
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Registers a theme definition.
|
|
43
|
+
#
|
|
44
|
+
# Themes are stored in a module-level hash and can be referenced by
|
|
45
|
+
# their key symbol. Use this to register custom themes or override
|
|
46
|
+
# built-in themes.
|
|
47
|
+
#
|
|
48
|
+
# @param key [Symbol, String] the unique theme identifier
|
|
49
|
+
# @param label [String] the human-readable theme name
|
|
50
|
+
# @param css [String] the asset path for the theme's CSS file
|
|
51
|
+
# @param js [String, nil] optional asset path for the theme's JavaScript file
|
|
52
|
+
# @param views_path [String, nil] optional view override path prefix
|
|
53
|
+
#
|
|
54
|
+
# @return [RSB::Admin::ThemeDefinition] the registered theme definition
|
|
55
|
+
#
|
|
56
|
+
# @example Register a custom theme
|
|
57
|
+
# RSB::Admin.register_theme :corporate,
|
|
58
|
+
# label: "Corporate",
|
|
59
|
+
# css: "my_app/admin/corporate",
|
|
60
|
+
# js: "my_app/admin/corporate",
|
|
61
|
+
# views_path: "my_app/admin/corporate/views"
|
|
62
|
+
def register_theme(key, label:, css:, js: nil, views_path: nil)
|
|
63
|
+
@themes ||= {}
|
|
64
|
+
@themes[key.to_sym] = ThemeDefinition.new(
|
|
65
|
+
key: key.to_sym,
|
|
66
|
+
label: label,
|
|
67
|
+
css: css,
|
|
68
|
+
js: js,
|
|
69
|
+
views_path: views_path
|
|
70
|
+
)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Returns all registered themes.
|
|
74
|
+
#
|
|
75
|
+
# @return [Hash{Symbol => RSB::Admin::ThemeDefinition}] a hash of theme definitions keyed by their symbol
|
|
76
|
+
#
|
|
77
|
+
# @example
|
|
78
|
+
# RSB::Admin.themes
|
|
79
|
+
# # => { default: #<data RSB::Admin::ThemeDefinition...>, modern: #<data...> }
|
|
80
|
+
def themes
|
|
81
|
+
@themes || {}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Returns the ThemeDefinition for the currently configured theme.
|
|
85
|
+
#
|
|
86
|
+
# Reads from the settings DB so changes made via the admin panel
|
|
87
|
+
# take effect immediately without restart. Falls back to
|
|
88
|
+
# +configuration.theme+ (initializer value) when settings are not
|
|
89
|
+
# yet available, and ultimately to the +:default+ theme.
|
|
90
|
+
#
|
|
91
|
+
# @return [RSB::Admin::ThemeDefinition] the active theme definition
|
|
92
|
+
#
|
|
93
|
+
# @example
|
|
94
|
+
# RSB::Settings.set("admin", "theme", "modern")
|
|
95
|
+
# RSB::Admin.current_theme
|
|
96
|
+
# # => #<data RSB::Admin::ThemeDefinition key=:modern, ...>
|
|
97
|
+
def current_theme
|
|
98
|
+
theme_key = RSB::Settings.get('admin.theme').presence || configuration.theme
|
|
99
|
+
themes[theme_key.to_sym] || themes[:default]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Checks whether the admin panel is enabled.
|
|
103
|
+
#
|
|
104
|
+
# Uses a special resolution order for safety: ENV has highest priority
|
|
105
|
+
# (overrides DB), so a developer can always force-enable via
|
|
106
|
+
# RSB_ADMIN_ENABLED=true without needing database access.
|
|
107
|
+
#
|
|
108
|
+
# Resolution: ENV['RSB_ADMIN_ENABLED'] → DB → initializer → default (true)
|
|
109
|
+
#
|
|
110
|
+
# @return [Boolean] true if the admin panel is enabled
|
|
111
|
+
#
|
|
112
|
+
# @example
|
|
113
|
+
# RSB::Admin.enabled? # => true (default)
|
|
114
|
+
#
|
|
115
|
+
# @example Force-enable via ENV
|
|
116
|
+
# ENV['RSB_ADMIN_ENABLED'] = 'true'
|
|
117
|
+
# RSB::Admin.enabled? # => true (even if DB says false)
|
|
118
|
+
def enabled?
|
|
119
|
+
# ENV override has highest priority (escape hatch)
|
|
120
|
+
return ActiveModel::Type::Boolean.new.cast(ENV['RSB_ADMIN_ENABLED']) if ENV.key?('RSB_ADMIN_ENABLED')
|
|
121
|
+
|
|
122
|
+
# Normal settings resolution: DB → initializer → default
|
|
123
|
+
RSB::Settings.get('admin.enabled') != false
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def reset!
|
|
127
|
+
@registry = Registry.new
|
|
128
|
+
@configuration = Configuration.new
|
|
129
|
+
@settings_schema = nil
|
|
130
|
+
@themes = {}
|
|
131
|
+
register_built_in_themes
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Convenience method to render an icon SVG.
|
|
135
|
+
#
|
|
136
|
+
# This is a shorthand for {RSB::Admin::Icons.render}.
|
|
137
|
+
# Useful when you need to render icons outside of view context.
|
|
138
|
+
#
|
|
139
|
+
# @param name [String, Symbol] The icon name (e.g., "users", :home)
|
|
140
|
+
# @param size [Integer] The width and height of the icon in pixels
|
|
141
|
+
#
|
|
142
|
+
# @return [ActiveSupport::SafeBuffer] HTML-safe SVG string, or empty string if icon not found
|
|
143
|
+
#
|
|
144
|
+
# @example
|
|
145
|
+
# RSB::Admin.icon("users")
|
|
146
|
+
# # => '<svg xmlns="..." width="18" height="18" ...>...</svg>'
|
|
147
|
+
#
|
|
148
|
+
# @example
|
|
149
|
+
# RSB::Admin.icon(:home, size: 32)
|
|
150
|
+
# # => '<svg xmlns="..." width="32" height="32" ...>...</svg>'
|
|
151
|
+
#
|
|
152
|
+
# @see RSB::Admin::Icons.render
|
|
153
|
+
def icon(name, size: 18)
|
|
154
|
+
Icons.render(name, size: size)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
private
|
|
158
|
+
|
|
159
|
+
# Registers the built-in themes (default and modern).
|
|
160
|
+
#
|
|
161
|
+
# This is called automatically at module load time and after {#reset!}.
|
|
162
|
+
#
|
|
163
|
+
# @api private
|
|
164
|
+
def register_built_in_themes
|
|
165
|
+
register_theme :default,
|
|
166
|
+
label: 'Default',
|
|
167
|
+
css: 'rsb/admin/themes/default',
|
|
168
|
+
views_path: nil
|
|
169
|
+
|
|
170
|
+
Themes::Modern.register!
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Register built-in themes at load time
|
|
175
|
+
register_built_in_themes
|
|
176
|
+
end
|
|
177
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :rsb do
|
|
4
|
+
desc 'Create an admin user. Usage: rsb:create_admin EMAIL=admin@example.com PASSWORD=secret'
|
|
5
|
+
task create_admin: :environment do
|
|
6
|
+
email = ENV.fetch('EMAIL') { abort 'EMAIL is required' }
|
|
7
|
+
password = ENV.fetch('PASSWORD') { abort 'PASSWORD is required' }
|
|
8
|
+
|
|
9
|
+
# Create superadmin role if it doesn't exist
|
|
10
|
+
role = RSB::Admin::Role.find_or_create_by!(name: 'Superadmin') do |r|
|
|
11
|
+
r.permissions = { '*' => ['*'] }
|
|
12
|
+
r.built_in = true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
admin = RSB::Admin::AdminUser.create!(
|
|
16
|
+
email: email,
|
|
17
|
+
password: password,
|
|
18
|
+
password_confirmation: password,
|
|
19
|
+
role: role
|
|
20
|
+
)
|
|
21
|
+
puts "Admin user created: #{admin.email} (role: #{role.name})"
|
|
22
|
+
end
|
|
23
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rsb-admin
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Aleksandr Marchenko
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: bcrypt
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '3.1'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '3.1'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rails
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '8.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '8.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rotp
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '6.3'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '6.3'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rqrcode
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '2.2'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '2.2'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: rsb-settings
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - '='
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 0.9.1
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - '='
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 0.9.1
|
|
82
|
+
description: Registrable admin panel with dynamic RBAC, settings page, and a test
|
|
83
|
+
kit for extension developers. Simpler than ActiveAdmin — designed for extensibility.
|
|
84
|
+
email:
|
|
85
|
+
- alex@marchenko.me
|
|
86
|
+
executables: []
|
|
87
|
+
extensions: []
|
|
88
|
+
extra_rdoc_files: []
|
|
89
|
+
files:
|
|
90
|
+
- LICENSE
|
|
91
|
+
- README.md
|
|
92
|
+
- Rakefile
|
|
93
|
+
- app/assets/javascripts/rsb/admin/themes/modern.js
|
|
94
|
+
- app/assets/stylesheets/rsb/admin/themes/default.css
|
|
95
|
+
- app/assets/stylesheets/rsb/admin/themes/modern.css
|
|
96
|
+
- app/controllers/concerns/rsb/admin/authorization.rb
|
|
97
|
+
- app/controllers/rsb/admin/admin_controller.rb
|
|
98
|
+
- app/controllers/rsb/admin/admin_users_controller.rb
|
|
99
|
+
- app/controllers/rsb/admin/dashboard_controller.rb
|
|
100
|
+
- app/controllers/rsb/admin/profile_controller.rb
|
|
101
|
+
- app/controllers/rsb/admin/profile_sessions_controller.rb
|
|
102
|
+
- app/controllers/rsb/admin/resources_controller.rb
|
|
103
|
+
- app/controllers/rsb/admin/roles_controller.rb
|
|
104
|
+
- app/controllers/rsb/admin/sessions_controller.rb
|
|
105
|
+
- app/controllers/rsb/admin/settings_controller.rb
|
|
106
|
+
- app/controllers/rsb/admin/two_factor_controller.rb
|
|
107
|
+
- app/helpers/rsb/admin/authorization_helper.rb
|
|
108
|
+
- app/helpers/rsb/admin/branding_helper.rb
|
|
109
|
+
- app/helpers/rsb/admin/formatting_helper.rb
|
|
110
|
+
- app/helpers/rsb/admin/i18n_helper.rb
|
|
111
|
+
- app/helpers/rsb/admin/icons_helper.rb
|
|
112
|
+
- app/helpers/rsb/admin/table_helper.rb
|
|
113
|
+
- app/helpers/rsb/admin/theme_helper.rb
|
|
114
|
+
- app/helpers/rsb/admin/url_helper.rb
|
|
115
|
+
- app/mailers/rsb/admin/admin_mailer.rb
|
|
116
|
+
- app/models/rsb/admin/admin_session.rb
|
|
117
|
+
- app/models/rsb/admin/admin_user.rb
|
|
118
|
+
- app/models/rsb/admin/application_record.rb
|
|
119
|
+
- app/models/rsb/admin/role.rb
|
|
120
|
+
- app/views/layouts/rsb/admin/application.html.erb
|
|
121
|
+
- app/views/rsb/admin/admin_mailer/email_verification.html.erb
|
|
122
|
+
- app/views/rsb/admin/admin_mailer/email_verification.text.erb
|
|
123
|
+
- app/views/rsb/admin/admin_users/_form.html.erb
|
|
124
|
+
- app/views/rsb/admin/admin_users/edit.html.erb
|
|
125
|
+
- app/views/rsb/admin/admin_users/index.html.erb
|
|
126
|
+
- app/views/rsb/admin/admin_users/new.html.erb
|
|
127
|
+
- app/views/rsb/admin/admin_users/show.html.erb
|
|
128
|
+
- app/views/rsb/admin/dashboard/index.html.erb
|
|
129
|
+
- app/views/rsb/admin/profile/edit.html.erb
|
|
130
|
+
- app/views/rsb/admin/profile/show.html.erb
|
|
131
|
+
- app/views/rsb/admin/resources/_filters.html.erb
|
|
132
|
+
- app/views/rsb/admin/resources/_form.html.erb
|
|
133
|
+
- app/views/rsb/admin/resources/_pagination.html.erb
|
|
134
|
+
- app/views/rsb/admin/resources/_table.html.erb
|
|
135
|
+
- app/views/rsb/admin/resources/edit.html.erb
|
|
136
|
+
- app/views/rsb/admin/resources/index.html.erb
|
|
137
|
+
- app/views/rsb/admin/resources/new.html.erb
|
|
138
|
+
- app/views/rsb/admin/resources/page.html.erb
|
|
139
|
+
- app/views/rsb/admin/resources/show.html.erb
|
|
140
|
+
- app/views/rsb/admin/roles/_form.html.erb
|
|
141
|
+
- app/views/rsb/admin/roles/edit.html.erb
|
|
142
|
+
- app/views/rsb/admin/roles/index.html.erb
|
|
143
|
+
- app/views/rsb/admin/roles/new.html.erb
|
|
144
|
+
- app/views/rsb/admin/roles/show.html.erb
|
|
145
|
+
- app/views/rsb/admin/sessions/new.html.erb
|
|
146
|
+
- app/views/rsb/admin/sessions/two_factor.html.erb
|
|
147
|
+
- app/views/rsb/admin/settings/_field.html.erb
|
|
148
|
+
- app/views/rsb/admin/settings/index.html.erb
|
|
149
|
+
- app/views/rsb/admin/shared/_badge.html.erb
|
|
150
|
+
- app/views/rsb/admin/shared/_breadcrumbs.html.erb
|
|
151
|
+
- app/views/rsb/admin/shared/_empty_state.html.erb
|
|
152
|
+
- app/views/rsb/admin/shared/_flash.html.erb
|
|
153
|
+
- app/views/rsb/admin/shared/_header.html.erb
|
|
154
|
+
- app/views/rsb/admin/shared/_page_tabs.html.erb
|
|
155
|
+
- app/views/rsb/admin/shared/_sidebar.html.erb
|
|
156
|
+
- app/views/rsb/admin/shared/disabled.html.erb
|
|
157
|
+
- app/views/rsb/admin/shared/fields/_checkbox.html.erb
|
|
158
|
+
- app/views/rsb/admin/shared/fields/_datetime.html.erb
|
|
159
|
+
- app/views/rsb/admin/shared/fields/_email.html.erb
|
|
160
|
+
- app/views/rsb/admin/shared/fields/_hidden.html.erb
|
|
161
|
+
- app/views/rsb/admin/shared/fields/_json.html.erb
|
|
162
|
+
- app/views/rsb/admin/shared/fields/_number.html.erb
|
|
163
|
+
- app/views/rsb/admin/shared/fields/_password.html.erb
|
|
164
|
+
- app/views/rsb/admin/shared/fields/_select.html.erb
|
|
165
|
+
- app/views/rsb/admin/shared/fields/_text.html.erb
|
|
166
|
+
- app/views/rsb/admin/shared/fields/_textarea.html.erb
|
|
167
|
+
- app/views/rsb/admin/shared/forbidden.html.erb
|
|
168
|
+
- app/views/rsb/admin/themes/modern/views/shared/_header.html.erb
|
|
169
|
+
- app/views/rsb/admin/themes/modern/views/shared/_sidebar.html.erb
|
|
170
|
+
- app/views/rsb/admin/two_factor/backup_codes.html.erb
|
|
171
|
+
- app/views/rsb/admin/two_factor/new.html.erb
|
|
172
|
+
- config/locales/en.yml
|
|
173
|
+
- config/locales/seo.en.yml
|
|
174
|
+
- config/routes.rb
|
|
175
|
+
- db/migrate/20260208000003_create_rsb_admin_tables.rb
|
|
176
|
+
- db/migrate/20260214000001_add_otp_fields_to_rsb_admin_admin_users.rb
|
|
177
|
+
- lib/generators/rsb/admin/install/install_generator.rb
|
|
178
|
+
- lib/generators/rsb/admin/install/templates/rsb_admin_seeds.rb
|
|
179
|
+
- lib/generators/rsb/admin/theme/templates/theme.css.tt
|
|
180
|
+
- lib/generators/rsb/admin/theme/theme_generator.rb
|
|
181
|
+
- lib/generators/rsb/admin/views/views_generator.rb
|
|
182
|
+
- lib/rsb/admin.rb
|
|
183
|
+
- lib/rsb/admin/breadcrumb_item.rb
|
|
184
|
+
- lib/rsb/admin/category_registration.rb
|
|
185
|
+
- lib/rsb/admin/column_definition.rb
|
|
186
|
+
- lib/rsb/admin/configuration.rb
|
|
187
|
+
- lib/rsb/admin/engine.rb
|
|
188
|
+
- lib/rsb/admin/filter_definition.rb
|
|
189
|
+
- lib/rsb/admin/form_field_definition.rb
|
|
190
|
+
- lib/rsb/admin/icons.rb
|
|
191
|
+
- lib/rsb/admin/page_registration.rb
|
|
192
|
+
- lib/rsb/admin/registry.rb
|
|
193
|
+
- lib/rsb/admin/resource_dsl_context.rb
|
|
194
|
+
- lib/rsb/admin/resource_registration.rb
|
|
195
|
+
- lib/rsb/admin/settings_schema.rb
|
|
196
|
+
- lib/rsb/admin/test_kit.rb
|
|
197
|
+
- lib/rsb/admin/test_kit/helpers.rb
|
|
198
|
+
- lib/rsb/admin/test_kit/resource_test_case.rb
|
|
199
|
+
- lib/rsb/admin/theme_definition.rb
|
|
200
|
+
- lib/rsb/admin/themes/modern.rb
|
|
201
|
+
- lib/rsb/admin/version.rb
|
|
202
|
+
- lib/tasks/rsb/admin_tasks.rake
|
|
203
|
+
homepage: https://github.com/Rails-SaaS-Builder/rails-saas-builder
|
|
204
|
+
licenses:
|
|
205
|
+
- LGPL-3.0
|
|
206
|
+
metadata:
|
|
207
|
+
source_code_uri: https://github.com/Rails-SaaS-Builder/rails-saas-builder
|
|
208
|
+
bug_tracker_uri: https://github.com/Rails-SaaS-Builder/rails-saas-builder/issues
|
|
209
|
+
changelog_uri: https://github.com/Rails-SaaS-Builder/rails-saas-builder/blob/master/CHANGELOG.md
|
|
210
|
+
rdoc_options: []
|
|
211
|
+
require_paths:
|
|
212
|
+
- lib
|
|
213
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
214
|
+
requirements:
|
|
215
|
+
- - ">="
|
|
216
|
+
- !ruby/object:Gem::Version
|
|
217
|
+
version: '3.2'
|
|
218
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - ">="
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '0'
|
|
223
|
+
requirements: []
|
|
224
|
+
rubygems_version: 3.6.8
|
|
225
|
+
specification_version: 4
|
|
226
|
+
summary: Lightweight admin panel framework for Rails SaaS Builder
|
|
227
|
+
test_files: []
|