Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge pull request #524 from jpkrohling/HAWKULAR-60-TransferOrganization
Browse files Browse the repository at this point in the history
HAWKULAR-60 - Ability to change an user's role in an organization
  • Loading branch information
mtho11 committed Oct 6, 2015
2 parents 10b6103 + ae5d44d commit 62a251e
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,34 @@ <h1>No members.</h1>
<tbody>
<tr ng-repeat="membership in controller.memberships">
<td>{{membership.member.name}}</td>
<td>{{membership.role.name}}</td>
<td>
<span ng-show="membership.member.id === controller.organization.owner.id">Owner</span>

<span ng-show="membership.member.id !== controller.organization.owner.id">
<span ng-show="controller.isAllowedToTransferOrganization">
<select
ng-model="membership.role"
ng-change="controller.changeRole(membership)"
ng-options="role.name for role in controller.possibleRoles track by role.name"
>
</select>
</span>

<span ng-show="!controller.isAllowedToTransferOrganization">
{{membership.role.name}}
</span>

<span ng-show="controller.membershipsToUpdate[membership.id] === PersistenceState.PERSISTING">
<i class="fa fa-spinner fa-spin"></i>
</span>
<span ng-show="controller.membershipsToUpdate[membership.id] === PersistenceState.SUCCESS">
<i class="fa fa-check"></i>
</span>
<span ng-show="controller.membershipsToUpdate[membership.id] === PersistenceState.ERROR">
<i class="fa fa-exclamation"></i>
</span>
</span>
</td>
</tr>
<tr ng-repeat="invitation in controller.pending" ng-show="controller.isAllowedToListPending">
<td>{{invitation.email}} <span class="label label-default">INVITED</span></td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,13 @@ module HawkularAccounts {
}

export interface IOrganizationMembership {
id: string;
organization: IOrganization;
member: IPersona;
role: IRole;
$update(options:{},
success?:(success:ISuccessPayload) => void,
failure?:(error:IErrorPayload) => void);
}

// specialized payloads, requests and responses
Expand Down Expand Up @@ -117,4 +121,6 @@ module HawkularAccounts {
this.name = name;
}
}

export enum PersistenceState {PERSISTING, SUCCESS, ERROR};
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ module HawkularAccounts {
_module.run(['$rootScope', '$log', '$modal', '$document', 'userDetails',
($rootScope, $log, $modal, $document, userDetails) => {
$rootScope.userDetails = userDetails;
$rootScope.PersistenceState = PersistenceState;

$rootScope.$on('IdleStart', () => {
$('#idle').slideDown();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@ module HawkularAccounts {
public organization:IOrganization;
public pending:Array<IInvitation>;
public role:IRole;
public possibleRoles:Array<Role>;

// state control, for easier UI consumption
public loading:boolean;
public foundOrganization:boolean;
public isAllowedToInvite:boolean = false;
public isAllowedToListPending:boolean = false;
public isAllowedToTransferOrganization:boolean = false;
public membershipsToUpdate:{ [id: string]: PersistenceState; } = {};

constructor(private $log:ng.ILogService,
private $rootScope:any,
Expand All @@ -53,13 +56,23 @@ module HawkularAccounts {
this.loading = true;
this.foundOrganization = false;
this.loadData();
this.possibleRoles = [
new Role('Monitor'),
new Role('Operator'),
new Role('Maintainer'),
new Role('Deployer'),
new Role('Administrator'),
new Role('Auditor'),
new Role('SuperUser')
];
}

public loadData():void {
let organizationId = this.$routeParams.organizationId;
this.loadOrganization(organizationId);
this.loadPermissionToInvite(organizationId);
this.loadPermissionToListPending(organizationId);
this.loadPermissionToTransferOrganization(organizationId);

this.$rootScope.$on('OrganizationLoaded', () => {
this.loadMemberships(organizationId);
Expand Down Expand Up @@ -112,7 +125,7 @@ module HawkularAccounts {
}

public loadPermissionToInvite(organizationId:string):void {
let operationName:string = 'organization-invite';
const operationName:string = 'organization-invite';
this.loadPermission(organizationId, operationName,
(response:IPermissionResponse) => {
this.isAllowedToInvite = response.permitted;
Expand All @@ -125,7 +138,7 @@ module HawkularAccounts {
}

public loadPermissionToListPending(organizationId:string):void {
let operationName:string = 'organization-list-invitations';
const operationName:string = 'organization-list-invitations';
this.loadPermission(organizationId, operationName,
(response:IPermissionResponse) => {
this.isAllowedToListPending = response.permitted;
Expand All @@ -138,6 +151,19 @@ module HawkularAccounts {
);
}

public loadPermissionToTransferOrganization(organizationId:string):void {
const operationName:string = 'organization-transfer';
this.loadPermission(organizationId, operationName,
(response:IPermissionResponse) => {
this.isAllowedToTransferOrganization = response.permitted;
this.$log.debug(`Finished checking if we can transfer this organization. Response: ${response.permitted}`);
},
(error:IErrorPayload) => {
this.$log.debug(`Error checking if we can transfer this organization. Response: ${error.data.message}`);
}
);
}

public loadPermission(
resourceId:string,
operationName:string,
Expand Down Expand Up @@ -165,6 +191,18 @@ module HawkularAccounts {
});

}

public changeRole(membership:IOrganizationMembership):void {
this.membershipsToUpdate[membership.id] = PersistenceState.PERSISTING;

membership.$update(null, (response:ISuccessPayload) => {
this.membershipsToUpdate[membership.id] = PersistenceState.SUCCESS;
}, (error:IErrorPayload) => {
this.membershipsToUpdate[membership.id] = PersistenceState.ERROR;
this.$log.debug(`Error changing role for membership. Response: ${error.data.message}`);
});

}
}

export class OrganizationInviteModalController {
Expand Down
3 changes: 3 additions & 0 deletions console/src/main/scripts/plugins/metrics/ts/metricsTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,12 @@ module HawkularMetrics {
username:string;
}

export enum PersistenceState {PERSISTING, SUCCESS, ERROR};

export interface IHawkularRootScope extends ng.IRootScopeService {
currentPersona:IPersona;
userDetails:IUserDetails;
PersistenceState:PersistenceState; // workaround, so that this enum can be accessed from the templates
}

export interface IResourceProperties {
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
<version.com.google.guava>16.0.1</version.com.google.guava>
<version.commons.io>2.4</version.commons.io>
<version.gnu.getopt>1.0.13</version.gnu.getopt>
<version.org.hawkular.accounts>1.0.16.Final-SRC-revision-a4578872c091411501d6bd528737c7f2b0902291</version.org.hawkular.accounts>
<version.org.hawkular.accounts>1.0.16.Final-SRC-revision-e5062a8f93d7f38c4e83c29d945155ca6e38300b</version.org.hawkular.accounts>
<version.org.hawkular.agent>0.10.1.Final-SRC-revision-978a81e1a3f688e1505950d2c67d3c615c0b313d</version.org.hawkular.agent>
<version.org.hawkular.alerts>0.5.0.Final-SRC-revision-4b0914c22cc1bf101b339149daa6f52aa383634f</version.org.hawkular.alerts>
<version.org.hawkular.bus>0.7.0.Final</version.org.hawkular.bus>
Expand Down

0 comments on commit 62a251e

Please sign in to comment.