class GoodData::UserGroup
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.
Constants
- EMPTY_OBJECT
Public Class Methods
Source
# 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
Returns list of all clients or a particular client
@param id [String|Symbol] Uri of the segment required or :all for all segments. @return [Array<GoodData::Segment>] List of segments for a particular domain
Source
# 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
Constructs payload for user management/manipulation
@return [Hash] Created payload
Source
# 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
Create new user group
Should not be called directly. Use GoodData::Project.add_user_group
. @param data [Hash] Initial data @option data name [String] @option data description [String] @option data project [GoodData::Project] @return [UserGroup] Newly created user group
Source
# 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
URI used for membership manipulation/managementv
@param client [Client] Client
used for communication with platform @param users [User | String | Array<User> | Array<String>] User(s) to be modified @param operation [String] Operation to be performed - ADD, SET, REMOVE @param uri [String] URI to be used for operation @return [String] URI used for membership manipulation/management
Source
# File lib/gooddata/models/user_group.rb, line 113 def initialize(json) @json = json self end
Initialize object with json
@return [UserGroup] User Group object initialized with json
Public Instance Methods
Source
# File lib/gooddata/models/user_group.rb, line 248 def ==(other) uri == other.uri end
Checks if two user groups are same
@return [Boolean] Return true if the two groups are same
Source
# File lib/gooddata/models/user_group.rb, line 122 def add_members(user) UserGroup.modify_users(client, user, 'ADD', uri_modify_members) end
Add member(s) to user group
@param [String | User | Array<User>] Users to add to user group @return [nil] Nothing is returned
Source
# File lib/gooddata/models/user_group.rb, line 147 def description content['description'] end
Gets user group description
@return [String] User group description
Source
# File lib/gooddata/models/user_group.rb, line 155 def description=(name) content['description'] = name end
Sets user group description
@param name [String] New user group description @return [String] New user group description
Source
# 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
Verifies if user is in a group or any nested group and returns true if it does
@return [Boolean] Retruns true if member is member of the group or any of its members
Source
# 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
Gets Users with this Role
@return [Array<GoodData::Profile>] List of users
Source
# File lib/gooddata/models/user_group.rb, line 131 def name content['name'] end
Gets user group name
@return [String] User group name
Source
# File lib/gooddata/models/user_group.rb, line 139 def name=(name) content['name'] = name name end
Sets user group name
@param name [String] New user group name @return [String] New user group name
Source
# File lib/gooddata/models/user_group.rb, line 213 def remove_members(user) UserGroup.modify_users(client, user, 'REMOVE', uri_modify_members) end
Remove member(s) from user group
@param [String | User | Array<User>] Users to remove from user group @return [nil] Nothing is returned
Source
# 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
Save user group New group is created if needed else existing one is updated
@return [UserGroup] Created or updated user group
Source
# 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
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!
@param [String | User | Array<User>] Users to set as members of user group @return [nil] Nothing is returned
Source
# File lib/gooddata/models/user_group.rb, line 234 def uri_modify_members links['modifyMembers'] end
URI used for membership manipulation/management
@return [String] URI used for membership manipulation/management
Source
# File lib/gooddata/models/user_group.rb, line 241 def user_group? true end
Is it a user group?
@return [Boolean] Return true if it is a user group