Class: GoodData::UserGroup
- Inherits:
-
Rest::Resource
- Object
- Rest::Object
- Rest::Resource
- GoodData::UserGroup
- Includes:
- Mixin::Author, Mixin::Contributor, Mixin::Links, Mixin::UriGetter
- Defined in:
- lib/gooddata/models/user_group.rb
Overview
Representation of User Group
Use user groups to manage user access to dashboards on the GoodData Portal. Create groups to more quickly manage permissions for users with the the same role or who need similar access to dashboards. Groups can be part of groups.
Constant Summary collapse
- EMPTY_OBJECT =
{ 'userGroup' => { 'content' => { 'name' => nil, 'description' => nil, 'project' => nil } } }
Instance Attribute Summary
Attributes inherited from Rest::Object
Class Method Summary collapse
-
.[](id, opts = {}) ⇒ Array<GoodData::Segment>
Returns list of all clients or a particular client.
-
.construct_payload(users, operation) ⇒ Hash
Constructs payload for user management/manipulation.
-
.create(data) ⇒ UserGroup
Create new user group.
-
.modify_users(client, users, operation, uri) ⇒ String
URI used for membership manipulation/managementv.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Checks if two user groups are same.
-
#add_members(user) ⇒ nil
(also: #add_member)
Add member(s) to user group.
-
#description ⇒ String
Gets user group description.
-
#description=(name) ⇒ String
Sets user group description.
-
#initialize(json) ⇒ UserGroup
constructor
Initialize object with json.
-
#member?(a_member) ⇒ Boolean
Verifies if user is in a group or any nested group and returns true if it does.
-
#members ⇒ Array<GoodData::Profile>
Gets Users with this Role.
-
#name ⇒ String
Gets user group name.
-
#name=(name) ⇒ String
Sets user group name.
-
#remove_members(user) ⇒ nil
(also: #remove_member)
Remove member(s) from user group.
-
#save ⇒ UserGroup
Save user group New group is created if needed else existing one is updated.
-
#set_members(user) ⇒ nil
(also: #set_member)
Set member(s) to user group.
-
#uri_modify_members ⇒ String
URI used for membership manipulation/management.
-
#user_group? ⇒ Boolean
Is it a user group?.
Methods included from Mixin::UriGetter
Methods included from Mixin::Links
Methods included from Mixin::Contributor
Methods included from Mixin::Author
Methods included from Mixin::ObjId
Methods inherited from Rest::Object
client, default_client, #saved?
Methods included from Mixin::DataPropertyReader
Methods included from Mixin::DataPropertyWriter
Methods included from Mixin::MetaPropertyReader
Methods included from Mixin::MetaPropertyWriter
Methods included from Mixin::MetaGetter
Methods included from Mixin::DataGetter
Methods included from Mixin::RootKeyGetter
Methods included from Mixin::ContentGetter
Constructor Details
#initialize(json) ⇒ UserGroup
Initialize object with json
113 114 115 116 |
# File 'lib/gooddata/models/user_group.rb', line 113 def initialize(json) @json = json self end |
Class Method Details
.[](id, opts = {}) ⇒ Array<GoodData::Segment>
Returns list of all clients or a particular client
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gooddata/models/user_group.rb', line 45 def [](id, opts = {}) # TODO: Replace with GoodData.get_client_and_project(opts) project = opts[:project] fail 'Project has to be passed in options' unless project fail 'Project has to be of type GoodData::Project' unless project.is_a?(GoodData::Project) client = project.client results = client.get('/gdc/userGroups', params: { :project => project.pid, :user => opts[:user] }.compact) groups = GoodData::Helpers.get_path(results, %w(userGroups items)).map { |i| client.create(GoodData::UserGroup, i, :project => project) } id == :all ? groups : groups.find { |g| g.obj_id == id || g.name == id } end |
.construct_payload(users, operation) ⇒ Hash
Constructs payload for user management/manipulation
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/gooddata/models/user_group.rb', line 82 def construct_payload(users, operation) users = users.is_a?(Array) ? users : [users] { modifyMembers: { operation: operation, items: users.map do |user| uri = user.respond_to?(:uri) ? user.uri : user fail 'You cannot add group as member of another group as of now.' if uri =~ %r{^\/gdc\/userGroups\/} uri end } } end |
.create(data) ⇒ UserGroup
Create new user group
Should not be called directly. Use GoodData::Project.add_user_group.
65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/gooddata/models/user_group.rb', line 65 def create(data) new_data = GoodData::Helpers.deep_dup(EMPTY_OBJECT).tap do |d| d['userGroup']['content']['name'] = data[:name] d['userGroup']['content']['description'] = data[:description] d['userGroup']['content']['project'] = data[:project].uri end client = data[:project].client group = client.create(GoodData::UserGroup, GoodData::Helpers.stringify_keys(new_data)) group.project = data[:project] group end |
.modify_users(client, users, operation, uri) ⇒ String
URI used for membership manipulation/managementv
104 105 106 107 |
# File 'lib/gooddata/models/user_group.rb', line 104 def modify_users(client, users, operation, uri) payload = construct_payload(users, operation) client.post(uri, payload) end |
Instance Method Details
#==(other) ⇒ Boolean
Checks if two user groups are same
248 249 250 |
# File 'lib/gooddata/models/user_group.rb', line 248 def ==(other) uri == other.uri end |
#add_members(user) ⇒ nil Also known as: add_member
Add member(s) to user group
122 123 124 |
# File 'lib/gooddata/models/user_group.rb', line 122 def add_members(user) UserGroup.modify_users(client, user, 'ADD', uri_modify_members) end |
#description ⇒ String
Gets user group description
147 148 149 |
# File 'lib/gooddata/models/user_group.rb', line 147 def description content['description'] end |
#description=(name) ⇒ String
Sets user group description
155 156 157 |
# File 'lib/gooddata/models/user_group.rb', line 155 def description=(name) content['description'] = name end |
#member?(a_member) ⇒ Boolean
Verifies if user is in a group or any nested group and returns true if it does
186 187 188 189 190 |
# File 'lib/gooddata/models/user_group.rb', line 186 def member?(a_member) # could be better on API directly? uri = a_member.respond_to?(:uri) ? a_member.uri : a_member members.map(&:uri).include?(uri) end |
#members ⇒ Array<GoodData::Profile>
Gets Users with this Role
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/gooddata/models/user_group.rb', line 162 def members url = GoodData::Helpers.get_path(data, %w(links members)) return [] unless url Enumerator.new do |y| loop do res = client.get url res['userGroupMembers']['paging']['next'] res['userGroupMembers']['items'].each do |member| case member.keys.first when 'user' y << client.create(GoodData::Profile, client.get(GoodData::Helpers.get_path(member, %w(user links self))), :project => project) when 'userGroup' y << client.create(UserGroup, client.get(GoodData::Helpers.get_path(member, %w(userGroup links self))), :project => project) end end url = res['userGroupMembers']['paging']['next'] break unless url end end end |
#name ⇒ String
Gets user group name
131 132 133 |
# File 'lib/gooddata/models/user_group.rb', line 131 def name content['name'] end |
#name=(name) ⇒ String
Sets user group name
139 140 141 142 |
# File 'lib/gooddata/models/user_group.rb', line 139 def name=(name) content['name'] = name name end |
#remove_members(user) ⇒ nil Also known as: remove_member
Remove member(s) from user group
213 214 215 |
# File 'lib/gooddata/models/user_group.rb', line 213 def remove_members(user) UserGroup.modify_users(client, user, 'REMOVE', uri_modify_members) end |
#save ⇒ UserGroup
Save user group New group is created if needed else existing one is updated
196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/gooddata/models/user_group.rb', line 196 def save if uri # get rid of unsupported keys data = json['userGroup'] client.put(uri, 'userGroup' => data.except('meta', 'links')) @json = client.get(uri) else response = client.post('/gdc/userGroups', @json) @json = client.get(response['uri']) end self end |
#set_members(user) ⇒ nil Also known as: set_member
Set member(s) to user group. Only users passed to this call will be new members of user group. Old members not passed to this method will be removed!
225 226 227 |
# File 'lib/gooddata/models/user_group.rb', line 225 def set_members(user) # rubocop:disable Style/AccessorMethodName UserGroup.modify_users(client, user, 'SET', uri_modify_members) end |
#uri_modify_members ⇒ String
URI used for membership manipulation/management
234 235 236 |
# File 'lib/gooddata/models/user_group.rb', line 234 def uri_modify_members links['modifyMembers'] end |
#user_group? ⇒ Boolean
Is it a user group?
241 242 243 |
# File 'lib/gooddata/models/user_group.rb', line 241 def user_group? true end |