diff --git a/app/patches/controllers/alchemy/solidus/spree_admin_users_controller_patch.rb b/app/patches/controllers/alchemy/solidus/spree_admin_users_controller_patch.rb new file mode 100644 index 0000000..834fd93 --- /dev/null +++ b/app/patches/controllers/alchemy/solidus/spree_admin_users_controller_patch.rb @@ -0,0 +1,24 @@ +# /home/anselm/code/alchemy-solidus/app/patches/controllers/alchemy/solidus/spree_admin_users_controller_patch.rb + +module Alchemy + module Solidus + module SpreeAdminUsersControllerPatch + def self.prepended(base) + base.after_action :assign_admin_roles_to_first_user, only: :create + end + + private + + def assign_admin_roles_to_first_user + if Spree.user_class.count == 1 + user = Spree.user_class.last + user.spree_roles = [Spree::Role.find_or_create_by(name: "admin")] + user.alchemy_roles = ["admin"] + user.save + end + end + end + end +end + +::Spree::Admin::UsersController.prepend(Alchemy::Solidus::SpreeAdminUsersControllerPatch) diff --git a/app/patches/models/alchemy/solidus/alchemy_devise_ability_patch.rb b/app/patches/models/alchemy/solidus/alchemy_devise_ability_patch.rb new file mode 100644 index 0000000..4e9fea3 --- /dev/null +++ b/app/patches/models/alchemy/solidus/alchemy_devise_ability_patch.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module Alchemy + module Solidus + module AlchemyDeviseAbilityPatch + def initialize(user) + super + + # Without these abilities, Alchemy's signup page does not work with Solidus' UsersController. + if Alchemy::User.count == 0 + can :admin, Alchemy::User + can :update_password, Alchemy::User + can :update_email, Alchemy::User + end + end + + if defined?(::Alchemy::Devise::Ability) + ::Alchemy::Devise::Ability.prepend self + end + end + end +end diff --git a/config/initializers/spree.rb b/config/initializers/spree.rb index 0201890..13e026b 100644 --- a/config/initializers/spree.rb +++ b/config/initializers/spree.rb @@ -1,5 +1,6 @@ if defined?(Alchemy::Devise::Engine) Spree.user_class = "Alchemy::User" + Spree::PermittedAttributes.user_attributes << :login end Rails.application.config.after_initialize do diff --git a/lib/alchemy/solidus/engine.rb b/lib/alchemy/solidus/engine.rb index 76c2812..64e31aa 100644 --- a/lib/alchemy/solidus/engine.rb +++ b/lib/alchemy/solidus/engine.rb @@ -32,6 +32,9 @@ class Engine < ::Rails::Engine config.to_prepare do Alchemy.register_ability ::Spree::Ability ::Spree::Ability.register_ability ::Alchemy::Permissions + Alchemy.registered_abilities.reject { _1 == Spree::Ability }.each do |ability| + ::Spree::Ability.register_ability ability + end if SolidusSupport.frontend_available? # Allows to render Alchemy content within Solidus' controller views