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.



431
432
433
434
435
436
437
438
439
440
441
442
# File 'lib/mxrb/dsl/builder.rb', line 431

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



459
460
461
# File 'lib/mxrb/dsl/builder.rb', line 459

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

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

Raises:

  • (ArgumentError)


467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
# File 'lib/mxrb/dsl/builder.rb', line 467

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



463
464
465
# File 'lib/mxrb/dsl/builder.rb', line 463

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

#evaluate(path) ⇒ Object



487
488
489
# File 'lib/mxrb/dsl/builder.rb', line 487

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

#evaluate_dir(dir) ⇒ Object



491
492
493
494
495
# File 'lib/mxrb/dsl/builder.rb', line 491

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



497
498
499
500
# File 'lib/mxrb/dsl/builder.rb', line 497

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

#password_policy(**options) ⇒ Object



506
507
508
# File 'lib/mxrb/dsl/builder.rb', line 506

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.



447
448
449
# File 'lib/mxrb/dsl/builder.rb', line 447

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

#sign_in_microflow(name) ⇒ Object



502
503
504
# File 'lib/mxrb/dsl/builder.rb', line 502

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

#to_hObject



510
511
512
513
514
515
516
517
518
519
520
521
522
# File 'lib/mxrb/dsl/builder.rb', line 510

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



451
452
453
454
455
456
457
# File 'lib/mxrb/dsl/builder.rb', line 451

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