mirror of https://github.com/grafana/grafana
feat(admin): admin page for all grafana organizations (list / edit view), #2457
parent
e01c68dcea
commit
43ef9f909a
@ -0,0 +1,52 @@ |
||||
define([ |
||||
'angular', |
||||
], |
||||
function (angular) { |
||||
'use strict'; |
||||
|
||||
var module = angular.module('grafana.controllers'); |
||||
|
||||
module.controller('AdminEditOrgCtrl', function($scope, $routeParams, backendSrv, $location) { |
||||
|
||||
$scope.init = function() { |
||||
if ($routeParams.id) { |
||||
$scope.getOrg($routeParams.id); |
||||
$scope.getOrgUsers($routeParams.id); |
||||
} |
||||
}; |
||||
|
||||
$scope.getOrg = function(id) { |
||||
backendSrv.get('/api/orgs/' + id).then(function(org) { |
||||
$scope.org = org; |
||||
}); |
||||
}; |
||||
|
||||
$scope.getOrgUsers = function(id) { |
||||
backendSrv.get('/api/orgs/' + id + '/users').then(function(orgUsers) { |
||||
$scope.orgUsers = orgUsers; |
||||
}); |
||||
}; |
||||
|
||||
$scope.update = function() { |
||||
if (!$scope.orgDetailsForm.$valid) { return; } |
||||
|
||||
backendSrv.put('/api/orgs/' + $scope.org.id, $scope.org).then(function() { |
||||
$location.path('/admin/orgs'); |
||||
}); |
||||
}; |
||||
|
||||
$scope.updateOrgUser= function(orgUser) { |
||||
backendSrv.patch('/api/orgs/' + orgUser.orgId + '/users/' + orgUser.userId, orgUser); |
||||
}; |
||||
|
||||
$scope.removeOrgUser = function(orgUser) { |
||||
backendSrv.delete('/api/orgs/' + orgUser.orgId + '/users/' + orgUser.userId).then(function() { |
||||
$scope.getOrgUsers($scope.org.id); |
||||
}); |
||||
}; |
||||
|
||||
$scope.init(); |
||||
|
||||
}); |
||||
|
||||
}); |
||||
@ -0,0 +1,38 @@ |
||||
define([ |
||||
'angular', |
||||
], |
||||
function (angular) { |
||||
'use strict'; |
||||
|
||||
var module = angular.module('grafana.controllers'); |
||||
|
||||
module.controller('AdminListOrgsCtrl', function($scope, backendSrv) { |
||||
|
||||
$scope.init = function() { |
||||
$scope.getOrgs(); |
||||
}; |
||||
|
||||
$scope.getOrgs = function() { |
||||
backendSrv.get('/api/orgs').then(function(orgs) { |
||||
$scope.orgs = orgs; |
||||
}); |
||||
}; |
||||
|
||||
$scope.deleteOrg = function(org) { |
||||
$scope.appEvent('confirm-modal', { |
||||
title: 'Do you want to delete organization ' + org.name + '?', |
||||
icon: 'fa-trash', |
||||
yesText: 'Delete', |
||||
onConfirm: function() { |
||||
backendSrv.delete('/api/orgs/' + org.id).then(function() { |
||||
$scope.getOrgs(); |
||||
}); |
||||
} |
||||
}); |
||||
}; |
||||
|
||||
$scope.init(); |
||||
|
||||
}); |
||||
|
||||
}); |
||||
@ -1,5 +1,7 @@ |
||||
define([ |
||||
'./adminUsersCtrl', |
||||
'./adminListUsersCtrl', |
||||
'./adminListOrgsCtrl', |
||||
'./adminEditOrgCtrl', |
||||
'./adminEditUserCtrl', |
||||
'./adminSettingsCtrl', |
||||
], function () {}); |
||||
|
||||
@ -0,0 +1,60 @@ |
||||
<topnav icon="fa fa-fw fa-user" title="Global Users" subnav="true"> |
||||
<ul class="nav"> |
||||
<li><a href="admin/orgs">List</a></li> |
||||
<li class="active"><a href="admin/orgs/edit/{{org.id}}">Edit Org</a></li> |
||||
</ul> |
||||
</topnav> |
||||
|
||||
<div class="page-container"> |
||||
<div class="page"> |
||||
<h2> |
||||
Organization Details |
||||
</h2> |
||||
|
||||
<form name="orgDetailsForm"> |
||||
<div> |
||||
<div class="tight-form"> |
||||
<ul class="tight-form-list"> |
||||
<li class="tight-form-item" style="width: 100px"> |
||||
Name |
||||
</li> |
||||
<li> |
||||
<input type="text" required ng-model="org.name" class="input-xxlarge tight-form-input last" > |
||||
</li> |
||||
</ul> |
||||
<div class="clearfix"></div> |
||||
</div> |
||||
</div> |
||||
|
||||
<br> |
||||
<button type="submit" class="pull-right btn btn-success" ng-click="update()" ng-show="!createMode">Update</button> |
||||
</form> |
||||
|
||||
<h3> |
||||
Organization Users |
||||
</h3> |
||||
|
||||
<table class="grafana-options-table form-inline"> |
||||
<tr> |
||||
<th>Username</th> |
||||
<th>Email</th> |
||||
<th>Role</th> |
||||
<th></th> |
||||
</tr> |
||||
<tr ng-repeat="orgUser in orgUsers"> |
||||
<td>{{orgUser.login}}</td> |
||||
<td>{{orgUser.email}}</td> |
||||
<td> |
||||
<select type="text" ng-model="orgUser.role" class="input-small" ng-options="f for f in ['Viewer', 'Editor', 'Read Only Editor', 'Admin']" ng-change="updateOrgUser(orgUser)"> |
||||
</select> |
||||
</td> |
||||
<td style="width: 1%"> |
||||
<a ng-click="removeOrgUser(orgUser)" class="btn btn-danger btn-mini"> |
||||
<i class="fa fa-remove"></i> |
||||
</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
</div> |
||||
</div> |
||||
Loading…
Reference in new issue