Class: Egnyte::Permission

Inherits:
Object
  • Object
show all
Defined in:
lib/egnyte/permission.rb

Constant Summary collapse

@@valid_perm_levels =

Representative Structure of @data {

'users': {
  'jsmith': 'Full',
  'jdoe': 'Editor'
},
'groups': {
  'employees': 'Full',
  'partners': 'Viewer'
}

}

["None", "Viewer", "Editor", "Full", "Owner"]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(permissions_hash = {}) ⇒ Permission

Returns a new instance of Permission.



19
20
21
22
23
# File 'lib/egnyte/permission.rb', line 19

def initialize(permissions_hash={})
  raise Egnyte::InvalidParameters unless (permissions_hash.empty? or permissions_hash['users'] or permissions_hash['groups'])
  @data = empty_permissions_hash
  merge!(permissions_hash)
end

Instance Attribute Details

#dataObject

Returns the value of attribute data.



5
6
7
# File 'lib/egnyte/permission.rb', line 5

def data
  @data
end

Class Method Details

.apply(session, permission_object, target_path) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/egnyte/permission.rb', line 128

def self.apply(session, permission_object, target_path)
  if permission_object.valid? and permission_object.has_data?
    permissions_set = transfrom_by_perm_level(permission_object)
    ["None", "Viewer", "Editor", "Full", "Owner"].each do |level|
      tmp_hash = {}
      tmp_hash['users']  = permissions_set['users'][level] unless permissions_set['users'].nil?
      tmp_hash['groups'] = permissions_set['groups'][level] unless permissions_set['groups'].nil?
      tmp_hash['permission'] = level
      unless tmp_hash['users'].nil? and tmp_hash['groups'].nil?
        unless tmp_hash['users'].empty? and tmp_hash['groups'].empty?
          session.post("#{self.permission_path(session)}/#{target_path}", tmp_hash.to_json, false)
        end
      end
    end
    "Permissions set on #{target_path}: #{permission_object.to_hash}"
  end
end

.build_from_api_listing(json_listing) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/egnyte/permission.rb', line 50

def self.build_from_api_listing(json_listing)
  perm = empty_permissions_hash
  json_listing.each do |type, data|
    data.each do |item|
      perm[type][item["subject"]] = item["permission"]
    end
  end
  Egnyte::Permission.new(perm)
end

.empty_permissions_hashObject



46
47
48
# File 'lib/egnyte/permission.rb', line 46

def self.empty_permissions_hash
  { 'users' => {}, 'groups' => {} }
end

.explicit_permissions(session, path, params = nil) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/egnyte/permission.rb', line 73

def self.explicit_permissions(session, path, params=nil)
  inherited = self.inherited_permissions(session, path, params).data
  permissions = self.folder_permissions(session, path, params).data
  explicit = self.empty_permissions_hash

  #filter out permissions that exist in the parent folder's permissions
  permissions.each do |type, perm|
    perm.each do |k,v|
      explicit[type][k] = v unless inherited[type][k] == v
    end
  end
  self.new(explicit)
end

.folder_permissions(session, path, params = nil) ⇒ Object



60
61
62
63
64
65
# File 'lib/egnyte/permission.rb', line 60

def self.folder_permissions(session, path, params=nil)
  path = Egnyte::Helper.normalize_path(path)
  path += Egnyte::Helper.params_to_filter_string(params) if params
  response = session.get("#{self.permission_path(session)}/#{path}")
  self.build_from_api_listing(response)
end

.inherited_permissions(session, path, params = nil) ⇒ Object



67
68
69
70
71
# File 'lib/egnyte/permission.rb', line 67

def self.inherited_permissions(session, path, params=nil)
  path = Egnyte::Helper.normalize_path(path)
  path = path.split('/')[0..-2].join('/')
  self.folder_permissions(session, path, params)
end

.permission_path(session) ⇒ Object



87
88
89
# File 'lib/egnyte/permission.rb', line 87

def self.permission_path(session)
  "https://#{session.domain}.#{EGNYTE_DOMAIN}/#{session.api}/v1/perms/folder"
end

.transfrom_by_perm_level(permission_object) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/egnyte/permission.rb', line 115

def self.transfrom_by_perm_level(permission_object)
  perm_type_hash = {
    'users' => { "None" => [], "Viewer" => [], "Editor" => [], "Full"   => [], "Owner"  => [] },
    'groups' => { "None" => [], "Viewer" => [], "Editor" => [], "Full"   => [], "Owner"  => [] }
  }
  permission_object.data.each do |type, perm|
    perm.each do |k,v|
      perm_type_hash[type][v] << k
    end
  end
  perm_type_hash
end

Instance Method Details

#==(other_perm_object) ⇒ Object



146
147
148
# File 'lib/egnyte/permission.rb', line 146

def ==(other_perm_object)
  @data == other_perm_object.data
end

#diff(other_perm_object) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/egnyte/permission.rb', line 150

def diff(other_perm_object)
  only_originial = Egnyte::Permission.new
  common_perms   = Egnyte::Permission.new
  only_other     = Egnyte::Permission.new
  discrepancies  = {'original' => Egnyte::Permission.new, 'other' => Egnyte::Permission.new}

  # find whether permission is only in the self's set or is common between self and other
  @data.each do |level, perm_hash|
    perm_hash.each do |item, permission|
      if other_perm_object.data[level][item].nil?
        only_originial.data[level][item] = permission
      elsif other_perm_object.data[level][item] != permission
        discrepancies['original'].data[level][item] = permission
        discrepancies['other'].data[level][item] = other_perm_object.data[level][item]
      end
      common_perms.data[level][item]   = permission if other_perm_object.data[level][item] == permission
    end
  end

  # find whether permission is in the other_perm_object
  other_perm_object.data.each do |level, perm_hash|
    perm_hash.each do |item, permission|
        only_other.data[level][item] = permission if @data[level][item].nil? || @data[level][item] != permission
    end
  end

  [only_originial, common_perms, only_other, discrepancies]
end

#empty?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/egnyte/permission.rb', line 99

def empty?
  return !has_data?
end

#empty_permissions_hashObject



42
43
44
# File 'lib/egnyte/permission.rb', line 42

def empty_permissions_hash
  Egnyte::Permission.empty_permissions_hash
end

#has_data?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/egnyte/permission.rb', line 95

def has_data?
  return @data['users'].size > 0 || @data['groups'].size > 0
end

#merge(new_perm_set) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/egnyte/permission.rb', line 25

def merge(new_perm_set)
  old_perm_set = @data.dup
  new_perm_set = new_perm_set.data if new_perm_set.class == Egnyte::Permission
  raise Egnyte::InvalidParameters unless new_perm_set.class == Hash
  new_perm_set.each do |type, perms_hash|
    perms_hash.each do |username, permission|
      permission.capitalize!
      old_perm_set[type][username] = permission if ["None", "Viewer", "Editor", "Full", "Owner"].include? permission
    end
  end
  old_perm_set
end

#merge!(new_perm_set) ⇒ Object



38
39
40
# File 'lib/egnyte/permission.rb', line 38

def merge!(new_perm_set)
  @data = merge(new_perm_set)
end

#to_hashObject



103
104
105
# File 'lib/egnyte/permission.rb', line 103

def to_hash
  @data
end

#to_jsonObject



107
108
109
# File 'lib/egnyte/permission.rb', line 107

def to_json
  to_hash.to_json
end

#to_sObject



111
112
113
# File 'lib/egnyte/permission.rb', line 111

def to_s
  to_json
end

#valid?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/egnyte/permission.rb', line 91

def valid?
  return @data['users'].class == Hash && @data['groups'].class == Hash
end