active_admin_access_control 0.2.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 45103a57818560d2dcdddeb6de3bb06d7be2f80d5743ff010d81f9aee99087a2
4
+ data.tar.gz: 49f4118a637d059b4f8a5c7e80c61e441a28919e89c9017085a7e49180382bc3
5
+ SHA512:
6
+ metadata.gz: c8922396f19f1d31cbd684c64e93312da1670569b2155fef10593b9ee6cb2547d43a3f7f0b259b3d7ba3c72f55d1b5c99e07e2c56fb396015e944b8cbb89bf57
7
+ data.tar.gz: ba0ef9a0f505f06b28c87a5f338a611fcc106e1aac824e295d2de945cbeac9d7511548b09149bd1cfdcf428b0bf95cbedfbe9740b22258feac4d3997dbbf35a6
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveAdminAccessControl
4
+ VERSION = "0.2.0"
5
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "active_admin_access_control/version"
4
+
5
+ module ActiveAdminAccessControl
6
+ class Error < StandardError; end
7
+ end
@@ -0,0 +1,19 @@
1
+ module ActiveAdminAccessControl
2
+ module Generators
3
+ module Helper
4
+ def self.included(klass)
5
+ klass.send :extend, ClassMethods
6
+ end
7
+
8
+ private
9
+
10
+ module ClassMethods
11
+ # Define the next_migration_number method (necessary for the migration_template method to work)
12
+ def next_migration_number(dirname)
13
+ sleep 1
14
+ Time.new.utc.strftime("%Y%m%d%H%M%S")
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,59 @@
1
+ require "rails/generators/migration"
2
+ require "generators/active_admin_access_control/helper"
3
+
4
+ module ActiveAdminAccessControl
5
+ module Generators
6
+ class InstallGenerator < ::Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+ include ActiveAdminAccessControl::Generators::Helper
9
+ source_root File.expand_path("./templates", __dir__)
10
+
11
+ def copy_migration_files
12
+ migration_template "migration/create_roles.rb", "db/migrate/create_roles.rb"
13
+ migration_template "migration/create_permissions.rb", "db/migrate/create_permissions.rb"
14
+ migration_template "migration/add_role_to_admin_user.rb", "db/migrate/add_role_to_admin_user.rb"
15
+ end
16
+
17
+ def copy_model_file
18
+ template "model/ability.rb", "app/models/ability.rb"
19
+ template "model/role.rb", "app/models/role.rb"
20
+ template "model/permission.rb", "app/models/permission.rb"
21
+ end
22
+
23
+ def configure_active_admin
24
+ gsub_file "config/initializers/active_admin.rb",
25
+ "# config.authorization_adapter = ActiveAdmin::CanCanAdapter",
26
+ "config.authorization_adapter = ActiveAdmin::CanCanAdapter"
27
+ end
28
+
29
+ def configure_seed_file
30
+ gsub_file "config/initializers/active_admin.rb",
31
+ "# config.authorization_adapter = ActiveAdmin::CanCanAdapter",
32
+ "config.authorization_adapter = ActiveAdmin::CanCanAdapter"
33
+ end
34
+
35
+ def copy_admin_permissions_file
36
+ template "admin/permissions.rb", "app/admin/permissions.rb"
37
+ template "admin/roles.rb", "app/admin/roles.rb"
38
+ end
39
+
40
+ def add_to_seed
41
+ append_to_file 'db/seeds.rb', "\n# Automatically added by Active Admin Access Control\n#{seed_data}"
42
+ end
43
+
44
+ private
45
+
46
+ def seed_data
47
+ <<~SEED
48
+ role = Role.find_or_create_by(name: 'admin')
49
+ AdminUser.find_or_initialize_by(email: 'admin@example.com').tap do |user|
50
+ user.password = 'password'
51
+ user.password_confirmation = 'password'
52
+ user.role_id = role.id
53
+ user.save!
54
+ end
55
+ SEED
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,16 @@
1
+ ActiveAdmin.register Permission do
2
+ permit_params :role_id, :class_name, :state, :action
3
+
4
+ menu parent: "Roles & Permissions"
5
+
6
+ form do |f|
7
+ f.semantic_errors # shows errors on :base
8
+ f.inputs do
9
+ f.input :role_id, as: :select, collection: Role.all.map { |r| [r.name, r.id] }
10
+ f.input :class_name, as: :select, collection: ActiveAdmin.application.namespaces[:admin].resources.map { |resource| resource.resource_name.to_s }
11
+ f.input :state
12
+ f.input :action, as: :select, collection: [ "read", "manage", "create", "update", "destroy"]
13
+ end
14
+ f.actions
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ ActiveAdmin.register Role do
2
+ permit_params :name
3
+
4
+ menu parent: "Roles & Permissions"
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddRoleToAdminUser < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_reference :admin_users, :role, null: false, foreign_key: true
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ class CreatePermissions < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :permissions do |t|
4
+ t.references :role, null: false, foreign_key: true
5
+ t.string :class_name
6
+ t.integer :state
7
+ t.string :action
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class CreateRoles < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :roles do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Ability
4
+ include CanCan::Ability
5
+
6
+ def initialize(user)
7
+ return if user.blank?
8
+
9
+ if user.role.name.downcase.include?("admin")
10
+ can :manage, :all
11
+ else
12
+ permission_settings(user)
13
+ end
14
+ can :read, ActiveAdmin::Page
15
+ end
16
+
17
+ def permission_settings(user)
18
+ user.role.permissions.map do |permission|
19
+ can permission.action.to_sym, permission.class_name.constantize if permission.can?
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ class Permission < ApplicationRecord
2
+ belongs_to :role
3
+
4
+ enum :state, %i(can cannot)
5
+
6
+ validates :role, :class_name, :state, :action, presence: true
7
+ end
@@ -0,0 +1,6 @@
1
+ class Role < ApplicationRecord
2
+ has_many :permissions, dependent: :destroy
3
+ has_many :admin_users, dependent: :destroy
4
+
5
+ validates :name, uniqueness: true
6
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_admin_access_control
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Lakhveer Singh Rajput
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-02-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Through the gem you can create the dynamic role and permissions for different
28
+ types of users to access active admin panel
29
+ email:
30
+ - rajputlakhveer@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/active_admin_access_control.rb
36
+ - lib/active_admin_access_control/version.rb
37
+ - lib/generators/active_admin_access_control/helper.rb
38
+ - lib/generators/active_admin_access_control/install_generator.rb
39
+ - lib/generators/active_admin_access_control/templates/admin/permissions.rb
40
+ - lib/generators/active_admin_access_control/templates/admin/roles.rb
41
+ - lib/generators/active_admin_access_control/templates/migration/add_role_to_admin_user.rb
42
+ - lib/generators/active_admin_access_control/templates/migration/create_permissions.rb
43
+ - lib/generators/active_admin_access_control/templates/migration/create_roles.rb
44
+ - lib/generators/active_admin_access_control/templates/model/ability.rb
45
+ - lib/generators/active_admin_access_control/templates/model/permission.rb
46
+ - lib/generators/active_admin_access_control/templates/model/role.rb
47
+ homepage: https://github.com/rajputlakhveer/active_admin_access_control
48
+ licenses: []
49
+ metadata: {}
50
+ post_install_message:
51
+ rdoc_options: []
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 2.3.0
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubygems_version: 3.0.8
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Dynamic Role & Permissions For Active Admin.
69
+ test_files: []