class CmAdmin::Model

def define_controller

If model is User, controller will be UsersController
Controller defined for each model
def define_controller
  klass = Class.new(CmAdmin::ResourceController) do
    include Pundit::Authorization
    rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
    $available_actions.each do |action|
      define_method action.name.to_sym do
        # controller_name & action_name from ActionController
        @model = CmAdmin::Model.find_by(name: controller_name.classify)
        @model.params = params
        @action = CmAdmin::Models::Action.find_by(@model, name: action_name)
        @model.current_action = @action
        send(@action.controller_action_name, params)
        # @ar_object = @model.try(@action.parent || action_name, params)
      end
    end
    def pundit_user
      Current.user
    end
    private
    def user_not_authorized
      flash[:alert] = 'You are not authorized to perform this action.'
      redirect_to CmAdmin::Engine.mount_path + '/access-denied'
    end
  end if $available_actions.present?
  CmAdmin.const_set "#{@name}Controller", klass
end