Merge remote-tracking branch 'origin/user-group-permissions' into temp-U4-10106
# Conflicts: # src/Umbraco.Web.UI/umbraco/config/lang/en.xml # src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
This commit is contained in:
@@ -55,6 +55,18 @@
|
||||
'Failed to enable the users ' + userIds.join(","));
|
||||
}
|
||||
|
||||
function setUserGroupsOnUsers(userGroups, userIds) {
|
||||
var userGroupAliases = userGroups.map(function(o) { return o.alias; });
|
||||
var query = "userGroupAliases=" + userGroupAliases.join("&userGroupAliases=") + "&userIds=" + userIds.join("&userIds=");
|
||||
return umbRequestHelper.resourcePromise(
|
||||
$http.post(
|
||||
umbRequestHelper.getApiUrl(
|
||||
"userApiBaseUrl",
|
||||
"PostSetUserGroupsOnUsers",
|
||||
query)),
|
||||
'Failed to set user groups ' + userGroupAliases.join(",") + ' on the users ' + userIds.join(","));
|
||||
}
|
||||
|
||||
function getPagedResults(options) {
|
||||
var defaults = {
|
||||
pageSize: 25,
|
||||
@@ -173,6 +185,7 @@
|
||||
var resource = {
|
||||
disableUsers: disableUsers,
|
||||
enableUsers: enableUsers,
|
||||
setUserGroupsOnUsers: setUserGroupsOnUsers,
|
||||
getPagedResults: getPagedResults,
|
||||
getUser: getUser,
|
||||
createUser: createUser,
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
vm.enableUser = enableUser;
|
||||
vm.clearAvatar = clearAvatar;
|
||||
vm.save = save;
|
||||
vm.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB"
|
||||
vm.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB";
|
||||
vm.acceptedFileTypes = mediaHelper.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes);
|
||||
vm.toggleChangePassword = toggleChangePassword;
|
||||
vm.emailIsUsername = true;
|
||||
@@ -56,8 +56,7 @@
|
||||
|
||||
vm.loading = false;
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function toggleChangePassword() {
|
||||
@@ -91,13 +90,9 @@
|
||||
|
||||
//the user has a password if they are not states: Invited, NoCredentials
|
||||
vm.changePasswordModel.config.hasPassword = vm.user.userState !== 3 && vm.user.userState !== 4;
|
||||
|
||||
}, function (err) {
|
||||
|
||||
vm.page.saveButtonState = "error";
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function goToPage(ancestor) {
|
||||
@@ -303,7 +298,6 @@
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function makeBreadcrumbs() {
|
||||
vm.breadcrumbs = [
|
||||
{
|
||||
@@ -322,9 +316,6 @@
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
}
|
||||
|
||||
angular.module("umbraco").controller("Umbraco.Editors.Users.UserController", UserEditController);
|
||||
|
||||
})();
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
vm.newUser.userGroups = [];
|
||||
vm.usersViewState = 'overview';
|
||||
|
||||
vm.selectedBulkUserGroups = [];
|
||||
|
||||
vm.allowDisableUser = true;
|
||||
vm.allowEnableUser = true;
|
||||
vm.allowSetUserGroup = true;
|
||||
@@ -73,6 +75,7 @@
|
||||
vm.clickUser = clickUser;
|
||||
vm.disableUsers = disableUsers;
|
||||
vm.enableUsers = enableUsers;
|
||||
vm.openBulkUserGroupPicker = openBulkUserGroupPicker;
|
||||
vm.openUserGroupPicker = openUserGroupPicker;
|
||||
vm.removeSelectedUserGroup = removeSelectedUserGroup;
|
||||
vm.selectAll = selectAll;
|
||||
@@ -216,13 +219,47 @@
|
||||
}
|
||||
|
||||
function getUserFromArrayById(userId, users) {
|
||||
var userFound;
|
||||
angular.forEach(users, function(user){
|
||||
if(userId === user.id) {
|
||||
userFound = user;
|
||||
return _.find(users, function(u) { return u.id === userId });
|
||||
}
|
||||
|
||||
function openBulkUserGroupPicker(event) {
|
||||
var firstSelectedUser = getUserFromArrayById(vm.selection[0], vm.users);
|
||||
|
||||
vm.selectedBulkUserGroups = _.clone(firstSelectedUser.userGroups);
|
||||
|
||||
vm.userGroupPicker = {
|
||||
title: "Select user groups",
|
||||
view: "usergrouppicker",
|
||||
selection: vm.selectedBulkUserGroups,
|
||||
closeButtonLabel: "Cancel",
|
||||
show: true,
|
||||
submit: function (model) {
|
||||
usersResource.setUserGroupsOnUsers(model.selection, vm.selection).then(function (data) {
|
||||
// sorting to ensure they show up in right order when updating the UI
|
||||
vm.selectedBulkUserGroups.sort(function (a, b) {
|
||||
return a.alias > b.alias ? 1 : a.alias < b.alias ? -1 : 0;
|
||||
});
|
||||
// apply changes to UI
|
||||
_.each(vm.selection,
|
||||
function(userId) {
|
||||
var user = getUserFromArrayById(userId, vm.users);
|
||||
user.userGroups = vm.selectedBulkUserGroups;
|
||||
});
|
||||
vm.selectedBulkUserGroups = [];
|
||||
vm.userGroupPicker.show = false;
|
||||
vm.userGroupPicker = null;
|
||||
formHelper.showNotifications(data);
|
||||
clearSelection();
|
||||
}, function (error) {
|
||||
formHelper.showNotifications(error.data);
|
||||
});
|
||||
},
|
||||
close: function (oldModel) {
|
||||
vm.selectedBulkUserGroups = [];
|
||||
vm.userGroupPicker.show = false;
|
||||
vm.userGroupPicker = null;
|
||||
}
|
||||
});
|
||||
return userFound;
|
||||
};
|
||||
}
|
||||
|
||||
function openUserGroupPicker(event) {
|
||||
@@ -488,6 +525,8 @@
|
||||
vm.allowEnableUser = true;
|
||||
vm.allowSetUserGroup = true;
|
||||
|
||||
var firstSelectedUserGroups;
|
||||
|
||||
angular.forEach(users, function (user) {
|
||||
|
||||
if (!user.selected) {
|
||||
@@ -514,6 +553,19 @@
|
||||
vm.allowEnableUser = false;
|
||||
}
|
||||
|
||||
// store the user group aliases of the first selected user
|
||||
if (!firstSelectedUserGroups) {
|
||||
firstSelectedUserGroups = user.userGroups.map(function (ug) { return ug.alias; });
|
||||
vm.allowSetUserGroup = true;
|
||||
} else if (vm.allowSetUserGroup === true) {
|
||||
// for 2nd+ selected user, compare the user group aliases to determine if we should allow bulk editing.
|
||||
// we don't allow bulk editing of users not currently having the same assigned user groups, as we can't
|
||||
// really support that in the user group picker.
|
||||
var userGroups = user.userGroups.map(function(ug) { return ug.alias; });
|
||||
if (_.difference(firstSelectedUserGroups, userGroups).length > 0) {
|
||||
vm.allowSetUserGroup = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<umb-editor-sub-header-section>
|
||||
<umb-button type="button"
|
||||
label="Clear selection"
|
||||
size="xs"
|
||||
size="xs"
|
||||
label-key="buttons_clearSelection"
|
||||
action="vm.clearSelection()"
|
||||
disabled="actionInProgress">
|
||||
@@ -60,32 +60,32 @@
|
||||
|
||||
<umb-editor-sub-header-content-right ng-if="vm.selection.length > 0">
|
||||
<div style="margin-right: 5px;">
|
||||
<umb-button ng-if="vm.allowSetUserGroup"
|
||||
type="button"
|
||||
size="xs"
|
||||
label="Set group"
|
||||
icon="icon-users"
|
||||
action="vm.setUserGroup()">
|
||||
<umb-button ng-if="vm.allowSetUserGroup"
|
||||
type="button"
|
||||
size="xs"
|
||||
label="Set group"
|
||||
icon="icon-users"
|
||||
action="vm.openBulkUserGroupPicker()">
|
||||
</umb-button>
|
||||
</div>
|
||||
<div style="margin-right: 5px;">
|
||||
<umb-button ng-if="vm.allowEnableUser"
|
||||
type="button"
|
||||
size="xs"
|
||||
state="vm.enableUserButtonState"
|
||||
label="Enable"
|
||||
icon="icon-check"
|
||||
action="vm.enableUsers()">
|
||||
<umb-button ng-if="vm.allowEnableUser"
|
||||
type="button"
|
||||
size="xs"
|
||||
state="vm.enableUserButtonState"
|
||||
label="Enable"
|
||||
icon="icon-check"
|
||||
action="vm.enableUsers()">
|
||||
</umb-button>
|
||||
</div>
|
||||
<div>
|
||||
<umb-button ng-if="vm.allowDisableUser"
|
||||
type="button"
|
||||
size="xs"
|
||||
state="vm.disableUserButtonState"
|
||||
label="Disable"
|
||||
icon="icon-block"
|
||||
action="vm.disableUsers()">
|
||||
<umb-button ng-if="vm.allowDisableUser"
|
||||
type="button"
|
||||
size="xs"
|
||||
state="vm.disableUserButtonState"
|
||||
label="Disable"
|
||||
icon="icon-block"
|
||||
action="vm.disableUsers()">
|
||||
</umb-button>
|
||||
</div>
|
||||
</umb-editor-sub-header-content-right>
|
||||
|
||||
@@ -1128,6 +1128,15 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="cssErrorText">An error occurred saving the file.</key>
|
||||
<key alias="deleteUserGroupsSuccess">Deleted %0% user groups</key>
|
||||
<key alias="deleteUserGroupSuccess">%0% was deleted</key>
|
||||
<key alias="enableUsersSuccess">Enabled %0% users</key>
|
||||
<key alias="enableUsersError">An error occurred while enabling the users</key>
|
||||
<key alias="disableUsersSuccess">Disabled %0% users</key>
|
||||
<key alias="disableUsersError">An error occurred while disabling the users</key>
|
||||
<key alias="enableUserSuccess">%0% is now enabled</key>
|
||||
<key alias="enableUserError">An error occurred while enabling the user</key>
|
||||
<key alias="disableUserSuccess">%0% is now disabled</key>
|
||||
<key alias="disableUserError">An error occurred while disabling the user</key>
|
||||
<key alias="setUserGroupOnUsersSuccess">User groups have been set</key>
|
||||
</area>
|
||||
<area alias="stylesheet">
|
||||
<key alias="aliasHelp">Uses CSS syntax ex: h1, .redHeader, .blueTex</key>
|
||||
|
||||
@@ -1095,16 +1095,15 @@ To manage your website, simply open the Umbraco back office and start adding con
|
||||
<key alias="scriptErrorHeader">Script view not saved</key>
|
||||
<key alias="scriptErrorText">An error occurred saving the file.</key>
|
||||
<key alias="cssErrorText">An error occurred saving the file.</key>
|
||||
|
||||
<key alias="enableUsersSuccess">Enabled %0% users</key>
|
||||
<key alias="enableUsersError">An error occurred while enabling the users</key>
|
||||
<key alias="disableUsersSuccess">Disabled %0% users</key>
|
||||
<key alias="disableUsersError">An error occurred while disabling the users</key>
|
||||
|
||||
<key alias="enableUserSuccess">%0% is now enabled </key>
|
||||
<key alias="enableUserSuccess">%0% is now enabled</key>
|
||||
<key alias="enableUserError">An error occurred while enabling the user</key>
|
||||
<key alias="disableUserSuccess">%0% is now disabled</key>
|
||||
<key alias="disableUserError">An error occurred while disabling the user</key>
|
||||
<key alias="setUserGroupOnUsersSuccess">User groups have been set</key>
|
||||
<key alias="deleteUserGroupsSuccess">Deleted %0% user groups</key>
|
||||
<key alias="deleteUserGroupSuccess">%0% was deleted</key>
|
||||
</area>
|
||||
|
||||
@@ -546,6 +546,23 @@ namespace Umbraco.Web.Editors
|
||||
Services.TextService.Localize("speechBubbles/enableUserSuccess", new[] { users[0].Name }));
|
||||
}
|
||||
|
||||
public HttpResponseMessage PostSetUserGroupsOnUsers([FromUri]string[] userGroupAliases, [FromUri]int[] userIds)
|
||||
{
|
||||
var users = Services.UserService.GetUsersById(userIds).ToArray();
|
||||
var userGroups = Services.UserService.GetUserGroupsByAlias(userGroupAliases).Select(x => x.ToReadOnlyGroup()).ToArray();
|
||||
foreach (var u in users)
|
||||
{
|
||||
u.ClearGroups();
|
||||
foreach (var userGroup in userGroups)
|
||||
{
|
||||
u.AddGroup(userGroup);
|
||||
}
|
||||
}
|
||||
Services.UserService.Save(users);
|
||||
return Request.CreateNotificationSuccessResponse(
|
||||
Services.TextService.Localize("speechBubbles/setUserGroupOnUsersSuccess"));
|
||||
}
|
||||
|
||||
public class PagedUserResult : PagedResult<UserBasic>
|
||||
{
|
||||
public PagedUserResult(long totalItems, long pageNumber, long pageSize) : base(totalItems, pageNumber, pageSize)
|
||||
|
||||
Reference in New Issue
Block a user