active_admin_access_control 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: []