Class: Mkxms::Mssql::PermissionGroup

Inherits:
Object
  • Object
show all
Defined in:
lib/mkxms/mssql/permission_handler.rb

Constant Summary collapse

ACTION_STATEMENT_PROLOG_TEMPLATES =
{
  'granted' => 'GRANT %s ON %s TO %s',
  'denied' => 'DENY %s ON %s TO %s',
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(action, subject) ⇒ PermissionGroup

Returns a new instance of PermissionGroup.



12
13
14
15
16
# File 'lib/mkxms/mssql/permission_handler.rb', line 12

def initialize(action, subject)
  @action = action
  @subject = subject
  @permissions = []
end

Instance Attribute Details

#actionObject

Returns the value of attribute action.



18
19
20
# File 'lib/mkxms/mssql/permission_handler.rb', line 18

def action
  @action
end

#permissionsObject (readonly)

Returns the value of attribute permissions.



19
20
21
# File 'lib/mkxms/mssql/permission_handler.rb', line 19

def permissions
  @permissions
end

#subjectObject

Returns the value of attribute subject.



18
19
20
# File 'lib/mkxms/mssql/permission_handler.rb', line 18

def subject
  @subject
end

Instance Method Details

#is_super_permission?(p) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/mkxms/mssql/permission_handler.rb', line 39

def is_super_permission?(p)
  action != 'granted' || p.grant_option?
end

#regular_permissionsObject



47
48
49
# File 'lib/mkxms/mssql/permission_handler.rb', line 47

def regular_permissions
  permissions.select {|p| !is_super_permission? p}
end

#regular_permissions_graphObject



31
32
33
34
35
36
37
# File 'lib/mkxms/mssql/permission_handler.rb', line 31

def regular_permissions_graph
  Hash.new.tap do |result|
    regular_permissions.sort {|a, b| a.target <=> b.target}.group_by {|p| p.target}.each_pair do |target, perms|
      result[target] = perms.map(&:name)
    end
  end
end

#super_permissionsObject



43
44
45
# File 'lib/mkxms/mssql/permission_handler.rb', line 43

def super_permissions
  permissions.select {|p| is_super_permission? p}
end

#super_permissions_sqlObject



21
22
23
24
25
26
27
28
29
# File 'lib/mkxms/mssql/permission_handler.rb', line 21

def super_permissions_sql
  super_permissions.map do |p|
    ''.tap do |sql|
      sql << ACTION_STATEMENT_PROLOG_TEMPLATES[action] % [p.name, p.target, subject]
      sql << ' WITH GRANT OPTION' if p.grant_option?
      sql << ';'
    end
  end
end