Class: Mxrb::Dsl::SecurityBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/mxrb/dsl/builder.rb

Instance Method Summary collapse

Constructor Details

#initializeSecurityBuilder

Returns a new instance of SecurityBuilder.



462
463
464
465
466
467
468
469
470
471
472
473
# File 'lib/mxrb/dsl/builder.rb', line 462

def initialize
  @user_roles = []
  @demo_users = []
  @demo_users_declared = false
  @security_level = nil
  @admin_user_role = nil
  @demo_users_enabled = nil
  @guest_access_enabled = nil
  @guest_user_role = nil
  @sign_in_microflow = nil
  @password_policy = nil
end

Instance Method Details

#admin_user_role(name) ⇒ Object



490
491
492
# File 'lib/mxrb/dsl/builder.rb', line 490

def admin_user_role(name)
  @admin_user_role = name.to_s
end

#demo_user(name, entity:, roles:, password:) ⇒ Object

Raises:

  • (ArgumentError)


498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
# File 'lib/mxrb/dsl/builder.rb', line 498

def demo_user(name, entity:, roles:, password:)
  user_name = name.to_s
  entity_name = entity.to_s
  role_names = Array(roles).map(&:to_s).uniq
  secret = password.to_s
  raise ArgumentError, 'demo user name must not be empty' if user_name.empty?
  raise ArgumentError, 'demo user name must not contain whitespace' unless user_name.match?(/\A[^\s]+\z/)
  unless entity_name.match?(/\A[A-Za-z][A-Za-z0-9_]*\.[A-Za-z][A-Za-z0-9_]*\z/)
    raise ArgumentError, 'demo user entity must be qualified as Module.Entity'
  end
  raise ArgumentError, 'demo user requires at least one role' if role_names.empty?
  raise ArgumentError, 'demo user password must not be empty' if secret.empty?

  @demo_users << {
    name: user_name, entity: entity_name, roles: role_names, password: secret
  }
  @demo_users_declared = true
  @demo_users_enabled = true
end

#demo_users(enabled = true) ⇒ Object



494
495
496
# File 'lib/mxrb/dsl/builder.rb', line 494

def demo_users(enabled = true)
  @demo_users_enabled = enabled == true
end

#evaluate(path) ⇒ Object



518
519
520
# File 'lib/mxrb/dsl/builder.rb', line 518

def evaluate(path)
  instance_eval(File.read(path), path, 1)
end

#evaluate_dir(dir) ⇒ Object



522
523
524
525
526
# File 'lib/mxrb/dsl/builder.rb', line 522

def evaluate_dir(dir)
  return unless File.directory?(dir)

  Dir[File.join(dir, '*.rb')].sort.each { |path| evaluate(path) }
end

#guest_access(enabled = true, role: nil) ⇒ Object



528
529
530
531
# File 'lib/mxrb/dsl/builder.rb', line 528

def guest_access(enabled = true, role: nil)
  @guest_access_enabled = enabled == true
  @guest_user_role = role&.to_s
end

#password_policy(**options) ⇒ Object



537
538
539
# File 'lib/mxrb/dsl/builder.rb', line 537

def password_policy(**options)
  @password_policy = options.transform_keys(&:to_sym)
end

#security_level(value) ⇒ Object

Mendix stores the project security mode as an enum-like string such as "CheckNothing" or "CheckEverything". Keep the native value explicit so export/import does not silently weaken project security.



478
479
480
# File 'lib/mxrb/dsl/builder.rb', line 478

def security_level(value)
  @security_level = value.to_s
end

#sign_in_microflow(name) ⇒ Object



533
534
535
# File 'lib/mxrb/dsl/builder.rb', line 533

def (name)
  @sign_in_microflow = name&.to_s
end

#to_hObject



541
542
543
544
545
546
547
548
549
550
551
552
553
# File 'lib/mxrb/dsl/builder.rb', line 541

def to_h
  {
    user_roles: @user_roles,
    demo_users: @demo_users_declared ? @demo_users : nil,
    security_level: @security_level,
    admin_user_role: @admin_user_role,
    demo_users_enabled: @demo_users_enabled,
    guest_access_enabled: @guest_access_enabled,
    guest_user_role: @guest_user_role,
    sign_in_microflow: @sign_in_microflow,
    password_policy: @password_policy
  }
end

#user_role(name, module_roles: [], admin: false) ⇒ Object



482
483
484
485
486
487
488
# File 'lib/mxrb/dsl/builder.rb', line 482

def user_role(name, module_roles: [], admin: false)
  @user_roles << {
    name: name.to_s,
    module_roles: Array(module_roles).map(&:to_s),
    admin: admin
  }
end