rnsap 0.4.9 → 0.4.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/auth.rb +131 -0
- data/lib/helper/util_helper.rb +1 -1
- data/lib/rnsap.rb +53 -13
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46c579462ff6f422f25681f0294a21888e8f2a22bb0462a11f079cd9b72fbbdd
|
4
|
+
data.tar.gz: b727dcb22d0b4672f5cb1b6740bfa3801a06a9ca9a040e1fb93c7bca5794b7e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 912238c4977896355b9f9fe7cb08bc9f4f1b450f3ce085968ec4bad3bbc70ca01ab0a0ca07e64e315a2dc9383f4021aadc3dd9d17604200d37dbffb84091a417
|
7
|
+
data.tar.gz: 8d378a789e570455b8b002a5f6475fc3de4e8462a29ea672993ae02f109a372bc60089c668ba83ec6732388eceeed6618aada48c0f56f1ae9ab97ad0ae1c9bb7
|
data/lib/auth.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
# Class to handle authorization related SAP information
|
2
|
+
# @author Rogerio Nascimento (26/03/2021)
|
3
|
+
class Auth
|
4
|
+
|
5
|
+
# Return a list of users with authorization
|
6
|
+
# for an object
|
7
|
+
# @param json containing authorization object and optionaly
|
8
|
+
# the tuples with field and value to be checked
|
9
|
+
# @return [Array] an array of strings with the list of users
|
10
|
+
def self.for_object(*options)
|
11
|
+
users = []
|
12
|
+
conn, obj, field1, value1, field2, value2 = validate_options(options)
|
13
|
+
return users unless conn && obj
|
14
|
+
|
15
|
+
## Busca o AUTH na tabela UST12
|
16
|
+
ust12_list = Auth.auth_list(conn, obj, field1, value1, field2, value2)
|
17
|
+
return users unless ust12_list
|
18
|
+
|
19
|
+
## Busca o PROFN na tabela UST10S
|
20
|
+
ust10s_list = Auth.profile_list(conn, obj, ust12_list)
|
21
|
+
|
22
|
+
## Busca os Usuários na tabela UST04
|
23
|
+
Auth.user_list(conn, obj, ust10s_list)
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Select Authorization roles for the Profile
|
28
|
+
# @param list List of profiles to be searched
|
29
|
+
# @return Array<string> with list of authorizations
|
30
|
+
def self.profiles_for_composite(conn, list = [])
|
31
|
+
return [] if list.empty?
|
32
|
+
|
33
|
+
fname = conn.conn.get_function('SIAG_PROF_GET_AUTH')
|
34
|
+
fcall = fname.get_function_call
|
35
|
+
|
36
|
+
fcall[:IV_PROFILE_TYPE] = 'C'
|
37
|
+
list.each do |prof|
|
38
|
+
row = fcall[:IT_PROFILE_RANGE].new_row
|
39
|
+
row[:SIGN] = 'I'
|
40
|
+
row[:OPTION] = 'EQ'
|
41
|
+
row[:LOW] = prof
|
42
|
+
end
|
43
|
+
|
44
|
+
fcall.invoke
|
45
|
+
|
46
|
+
ret = []
|
47
|
+
fcall[:ET_COMPOSITE_PROFILE].each do |row|
|
48
|
+
ret.push(row[:SINGLE_PROFILE])
|
49
|
+
end
|
50
|
+
|
51
|
+
ret
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def self.validate_options(options)
|
58
|
+
return [] if options.empty?
|
59
|
+
params = options.first
|
60
|
+
|
61
|
+
conn = params[:conn]
|
62
|
+
obj = params[:obj]
|
63
|
+
|
64
|
+
return [] unless conn && obj
|
65
|
+
return [] unless conn.class.name == 'RnSap::Sap'
|
66
|
+
|
67
|
+
field1 = params[:field1]
|
68
|
+
value1 = params[:value1]
|
69
|
+
field2 = params[:field2]
|
70
|
+
value2 = params[:value2]
|
71
|
+
|
72
|
+
[conn, obj, field1, value1, field2, value2]
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.auth_list( conn, obj, field1, value1, field2, value2)
|
76
|
+
|
77
|
+
fields = ['AUTH']
|
78
|
+
filter = ["OBJCT = '#{obj}' "]
|
79
|
+
if field1 && value1
|
80
|
+
filter.push(" AND ( FIELD = '#{field1}' AND ( VON = '*' OR VON = '#{value1}' ) ")
|
81
|
+
if field2 && value2
|
82
|
+
filter.push(" OR FIELD = '#{field2}' AND ( VON = '*' OR VON = '#{value2}' ) )")
|
83
|
+
else
|
84
|
+
filter.push( ')')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
conn.read_table('UST12', fields, filter)
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.profile_list( conn, obj, ust12_list)
|
92
|
+
sap_all = 'SAP_ALL'
|
93
|
+
profiles = Auth.profiles_for_composite(conn, [sap_all])
|
94
|
+
profiles.push(sap_all)
|
95
|
+
|
96
|
+
fields = ['PROFN']
|
97
|
+
filter = ["OBJCT = '#{obj}' AND AUTH IN ("]
|
98
|
+
profiles.each do |prof|
|
99
|
+
filter.push( "'#{prof}' , ")
|
100
|
+
end
|
101
|
+
ust12_list.each do |ust|
|
102
|
+
filter.push( "'#{ust.auth}' , ")
|
103
|
+
end
|
104
|
+
filter = filter.uniq
|
105
|
+
|
106
|
+
new_last = "#{filter.last[0..(filter.last.length - 4)]} )"
|
107
|
+
filter = filter[0..-1].push(new_last)
|
108
|
+
|
109
|
+
conn.read_table('UST10S', fields, filter)
|
110
|
+
end
|
111
|
+
|
112
|
+
def self.user_list(conn, obj, ust10s_list)
|
113
|
+
users = []
|
114
|
+
fields = ['BNAME']
|
115
|
+
filter = ['PROFILE IN (']
|
116
|
+
filter.push("'SAP_ALL' , ")
|
117
|
+
ust10s_list.each do |ust|
|
118
|
+
filter.push("'#{ust.profn}' , ")
|
119
|
+
end
|
120
|
+
new_last = "#{filter.last[0..(filter.last.length - 4)]} )"
|
121
|
+
filter = filter[0..-1].push(new_last)
|
122
|
+
|
123
|
+
ust04_list = conn.read_table('UST04', fields, filter)
|
124
|
+
|
125
|
+
ust04_list.each do |ust|
|
126
|
+
users.push( ust.bname )
|
127
|
+
end
|
128
|
+
|
129
|
+
users.uniq.sort
|
130
|
+
end
|
131
|
+
end
|
data/lib/helper/util_helper.rb
CHANGED
data/lib/rnsap.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'nwrfc'
|
4
4
|
require 'read_table/table_column'
|
5
|
+
require 'auth'
|
5
6
|
|
6
7
|
require 'return'
|
7
8
|
|
@@ -161,19 +162,21 @@ module RnSap
|
|
161
162
|
value = wa[pos].to_f
|
162
163
|
eval("obj.#{field} = #{value}")
|
163
164
|
elsif DATE_TYPES.include?(column.type)
|
164
|
-
value
|
165
|
-
if value == '00000000'
|
165
|
+
if value.nil? || value == '00000000'
|
166
166
|
eval("obj.#{field} = nil")
|
167
167
|
else
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
)
|
173
|
-
eval("obj.#{field} = #{value}")
|
168
|
+
year = value[0..3].to_i
|
169
|
+
month = value[4..5].to_i
|
170
|
+
day = value[6..7].to_i
|
171
|
+
# value = Date.new(year, month, day)
|
172
|
+
eval("obj.#{field} = Date.new(#{year}, #{month}, #{day}) ")
|
174
173
|
end
|
175
174
|
else
|
176
|
-
|
175
|
+
begin
|
176
|
+
value = wa[pos].strip
|
177
|
+
rescue
|
178
|
+
value = ''
|
179
|
+
end
|
177
180
|
eval("obj.#{field} = '#{value}'")
|
178
181
|
end
|
179
182
|
|
@@ -438,6 +441,37 @@ module RnSap
|
|
438
441
|
|
439
442
|
end
|
440
443
|
|
444
|
+
##
|
445
|
+
# Gets a list of users with authorization for a given
|
446
|
+
# authorization object and content
|
447
|
+
# @params:
|
448
|
+
# - obj [String] SAP authorization Object
|
449
|
+
# Ex: for Purchase Requisitions M_EINK_FRG
|
450
|
+
# - field1 [String] Object authorization's field.
|
451
|
+
# Ex: for Release Group FRGGR
|
452
|
+
# - value1 [String] Field Value
|
453
|
+
# Ex: any valid Release Group in the instalation
|
454
|
+
# - field2 [String] Object authorization's field.
|
455
|
+
# Ex: for Release Code FRGCO
|
456
|
+
# - value2 [String] Field Value
|
457
|
+
# Ex: any valid Release Code in the instalation
|
458
|
+
# @return [Array] Array of strings with the SAP userids
|
459
|
+
def users_for_auth_object(obj, field1, value1, field2, value2)
|
460
|
+
Auth.for_object(
|
461
|
+
conn: self,
|
462
|
+
obj: obj,
|
463
|
+
field1: field1,
|
464
|
+
value1: value1,
|
465
|
+
field2: field2,
|
466
|
+
value2: value2,
|
467
|
+
)
|
468
|
+
end
|
469
|
+
|
470
|
+
|
471
|
+
|
472
|
+
private
|
473
|
+
attr_writer :conn
|
474
|
+
|
441
475
|
def api_return_success(obj=nil )
|
442
476
|
UtilHelper.api_return(0, 'Success!', obj)
|
443
477
|
end
|
@@ -450,9 +484,7 @@ module RnSap
|
|
450
484
|
UtilHelper.api_return(rc, message, obj, exception)
|
451
485
|
end
|
452
486
|
|
453
|
-
|
454
|
-
|
455
|
-
attr_writer :conn
|
487
|
+
|
456
488
|
|
457
489
|
# Dumps to the output the content of an object
|
458
490
|
def dump_instance_variables(obj)
|
@@ -462,6 +494,8 @@ module RnSap
|
|
462
494
|
end
|
463
495
|
end
|
464
496
|
|
497
|
+
KLASS_LIST = {}
|
498
|
+
|
465
499
|
# Dynamically returns a class instance with the name 'name' and with each
|
466
500
|
# of its fields as an attribute
|
467
501
|
# @param name [String] name of the intended class instance
|
@@ -469,7 +503,13 @@ module RnSap
|
|
469
503
|
# @return [Object] instance of the object 'Name'
|
470
504
|
def get_class_instance(name, fields)
|
471
505
|
# puts "Class name: #{name}"
|
472
|
-
|
506
|
+
pre_created = KLASS_LIST[name]
|
507
|
+
if pre_created
|
508
|
+
klass = pre_created.new
|
509
|
+
else
|
510
|
+
KLASS_LIST[name] = Object.const_set(name, Class.new)
|
511
|
+
klass = KLASS_LIST[name].new # , Struct.new(*attributes)
|
512
|
+
end
|
473
513
|
fields.each do |field|
|
474
514
|
klass.class.module_eval { attr_accessor field.downcase }
|
475
515
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rnsap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rogerio Nascimento
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nwrfc
|
@@ -38,13 +38,14 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: By encapsulating SAPs NW RFC library calls, Ruby routines
|
42
|
-
|
41
|
+
description: By encapsulating SAPs NW RFC library calls, Ruby routines achieve SAP
|
42
|
+
bunsiness functionalitys power in a simpler manner
|
43
43
|
email:
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- lib/auth.rb
|
48
49
|
- lib/helper/rfc_helper.rb
|
49
50
|
- lib/helper/util_helper.rb
|
50
51
|
- lib/po_detail/all.rb
|