Skip to content

Commit 512ef25

Browse files
authored
Merge pull request #218 from Gid733/master
Added feature to create new admins and role changing
2 parents 6a36885 + ce78833 commit 512ef25

File tree

7 files changed

+111
-10
lines changed

7 files changed

+111
-10
lines changed

eFormAPI/eFormAPI.Web/Resources/SharedResource.da.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,4 +573,13 @@
573573
<data name="PluginNotFound" xml:space="preserve">
574574
<value>Plugin ikke fundet</value>
575575
</data>
576+
<data name="CantEditPrimaryAdminUser" xml:space="preserve">
577+
<value>Du kan ikke se, ændre eller slette primæradministrator</value>
578+
</data>
579+
<data name="CantUpdateRoleForPrimaryAdminUser" xml:space="preserve">
580+
<value>Det er ikke muligt at skifte rolle for primæradministrator</value>
581+
</data>
582+
<data name="RoleNotFound" xml:space="preserve">
583+
<value>Rolle ikke fundet</value>
584+
</data>
576585
</root>

eFormAPI/eFormAPI.Web/Resources/SharedResource.de.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,4 +555,13 @@
555555
<data name="PluginNotFound" xml:space="preserve">
556556
<value>Plugin nicht gefunden</value>
557557
</data>
558+
<data name="CantEditPrimaryAdminUser" xml:space="preserve">
559+
<value>U kunt primaire beheerder niet bekijken, wijzigen of verwijderen</value>
560+
</data>
561+
<data name="CantUpdateRoleForPrimaryAdminUser" xml:space="preserve">
562+
<value>Het is niet mogelijk om de rol voor primaire beheerder te wijzigen</value>
563+
</data>
564+
<data name="RoleNotFound" xml:space="preserve">
565+
<value>Rol niet gevonden</value>
566+
</data>
558567
</root>

eFormAPI/eFormAPI.Web/Resources/SharedResource.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,4 +573,13 @@
573573
<data name="PluginNotFound" xml:space="preserve">
574574
<value>Plugin not found</value>
575575
</data>
576+
<data name="CantEditPrimaryAdminUser" xml:space="preserve">
577+
<value>You can't view, change or delete primary admin</value>
578+
</data>
579+
<data name="CantUpdateRoleForPrimaryAdminUser" xml:space="preserve">
580+
<value>It's not possible to change role for primary admin</value>
581+
</data>
582+
<data name="RoleNotFound" xml:space="preserve">
583+
<value>Role not fond</value>
584+
</data>
576585
</root>

eFormAPI/eFormAPI.Web/Services/AdminService.cs

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,25 +127,37 @@ public async Task<OperationResult> UpdateUser(UserRegisterModel userRegisterMode
127127
{
128128
try
129129
{
130+
if (userRegisterModel.Id == 1 && _userService.UserId != 1)
131+
{
132+
return new OperationResult(false, _localizationService.GetString("CantEditPrimaryAdminUser"));
133+
}
134+
135+
if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User)
136+
{
137+
return new OperationResult(false,
138+
_localizationService.GetString("RoleNotFound"));
139+
}
140+
130141
var user = await _userService.GetByIdAsync(userRegisterModel.Id);
131142
if (user == null)
132143
{
133144
return new OperationResult(false,
134145
_localizationService.GetStringWithFormat("UserNotFoundUserName", userRegisterModel.UserName));
135146
}
136147

148+
149+
if (_userService.UserId == 1 && !await _userManager.IsInRoleAsync(user, userRegisterModel.Role))
150+
{
151+
return new OperationResult(false, _localizationService.GetString("CantUpdateRoleForPrimaryAdminUser"));
152+
}
153+
137154
var isAdmin = await _userManager.IsInRoleAsync(user, EformRole.Admin);
138155
if (!_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId) && !isAdmin)
139156
{
140157
return new OperationResult(false,
141158
_localizationService.GetString("SecurityGroupNotFound"));
142159
}
143160

144-
if (userRegisterModel.Role == null)
145-
{
146-
return new OperationResult(false, _localizationService.GetString("RoleIsRequired"));
147-
}
148-
149161
if (isAdmin && _userService.Role != EformRole.Admin)
150162
{
151163
return new OperationResult(false, _localizationService.GetString("YouCantViewChangeOrDeleteAdmin"));
@@ -156,6 +168,7 @@ public async Task<OperationResult> UpdateUser(UserRegisterModel userRegisterMode
156168
user.UserName = userRegisterModel.Email;
157169
user.FirstName = userRegisterModel.FirstName;
158170
user.LastName = userRegisterModel.LastName;
171+
159172
var result = await _userManager.UpdateAsync(user);
160173
if (!result.Succeeded)
161174
{
@@ -169,6 +182,15 @@ public async Task<OperationResult> UpdateUser(UserRegisterModel userRegisterMode
169182
await _userManager.AddPasswordAsync(user, userRegisterModel.Password);
170183
}
171184

185+
// change role
186+
if (!await _userManager.IsInRoleAsync(user, userRegisterModel.Role))
187+
{
188+
var currentUserRole = await _userManager.GetRolesAsync(user);
189+
await _userManager.RemoveFromRolesAsync(user, currentUserRole);
190+
191+
await _userManager.AddToRoleAsync(user, userRegisterModel.Role);
192+
}
193+
172194
// Change group
173195
if (userRegisterModel.GroupId > 0 && user.Id > 0)
174196
{
@@ -191,6 +213,19 @@ public async Task<OperationResult> UpdateUser(UserRegisterModel userRegisterMode
191213
await _dbContext.SaveChangesAsync();
192214
}
193215

216+
if (userRegisterModel.Role == EformRole.Admin)
217+
{
218+
var securityGroupUsers = await _dbContext.SecurityGroupUsers.Where(x => x.EformUserId == user.Id)
219+
.ToListAsync();
220+
221+
if (securityGroupUsers.Any())
222+
{
223+
_dbContext.SecurityGroupUsers.RemoveRange(securityGroupUsers);
224+
225+
await _dbContext.SaveChangesAsync();
226+
}
227+
}
228+
194229
return new OperationResult(true,
195230
_localizationService.GetStringWithFormat("UserUserNameWasUpdated", user.UserName));
196231
}
@@ -205,14 +240,21 @@ public async Task<OperationResult> CreateUser(UserRegisterModel userRegisterMode
205240
{
206241
try
207242
{
243+
if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User)
244+
{
245+
return new OperationResult(false,
246+
_localizationService.GetString("RoleNotFound"));
247+
}
248+
208249
var userResult = await _userManager.FindByNameAsync(userRegisterModel.Email);
250+
209251
if (userResult != null)
210252
{
211253
return new OperationResult(false,
212254
_localizationService.GetStringWithFormat("UserUserNameAlreadyExist", userRegisterModel.Email));
213255
}
214256

215-
if (!_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId))
257+
if (userRegisterModel.Role != EformRole.Admin && !_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId))
216258
{
217259
return new OperationResult(false,
218260
_localizationService.GetString("SecurityGroupNotFound"));
@@ -235,10 +277,12 @@ public async Task<OperationResult> CreateUser(UserRegisterModel userRegisterMode
235277
return new OperationResult(false, string.Join(" ", result.Errors.Select(x=>x.Description).ToArray()));
236278
}
237279

280+
281+
238282
// change role
239-
await _userManager.AddToRoleAsync(user, EformRole.User);
283+
await _userManager.AddToRoleAsync(user, userRegisterModel.Role);
240284
// add to group
241-
if (userRegisterModel.GroupId > 0 && user.Id > 0)
285+
if (userRegisterModel.GroupId > 0 && user.Id > 0 && userRegisterModel.Role != EformRole.Admin)
242286
{
243287
var securityGroupUser = new SecurityGroupUser()
244288
{

eform-client/src/app/modules/account-management/components/users/new-user-modal/new-user-modal.component.html

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ <h3>{{ 'New User' | translate }}</h3>
4646
<input mdbInputDirective
4747
[mdbValidate]="false"
4848
class="form-control"
49-
required #createPassword="ngModel" type="text"
49+
required type="text"
5050
[(ngModel)]="newUserModel.password" id="createPassword"
5151
name="createPassword">
5252
<label for="createPassword">{{'Password' | translate}}*</label>
@@ -55,6 +55,18 @@ <h3>{{ 'New User' | translate }}</h3>
5555
</div>
5656
<div class="row">
5757
<div class="col-md-6 ng-select-wrapper">
58+
<ng-select required
59+
bindLabel="name"
60+
bindValue="id"
61+
[clearable]="false"
62+
[(ngModel)]="newUserModel.role" name="createRole"
63+
[placeholder]="'Role' | translate"
64+
[items]="[
65+
{id: 'admin', name: 'Admin' | translate},
66+
{id: 'user', name: 'User' | translate}
67+
]"></ng-select>
68+
</div>
69+
<div class="col-md-6 ng-select-wrapper" *ngIf="newUserModel.role !== 'admin'">
5870
<ng-select required
5971
bindLabel="name"
6072
bindValue="id"

eform-client/src/app/modules/account-management/components/users/user-edit/user-edit-modal.component.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,24 @@ <h3>{{'Edit User' | translate}}</h3>
5454
</div>
5555
</div>
5656
<div class="row">
57+
<div class="col-md-6 ng-select-wrapper">
58+
<ng-select required
59+
bindLabel="name"
60+
bindValue="id"
61+
[clearable]="false"
62+
[ngModel]="selectedUserModel.role" name="editRole"
63+
(ngModelChange)="onUserRoleUpdated($event)"
64+
[placeholder]="'Role' | translate"
65+
[items]="[
66+
{id: 'admin', name: 'Admin' | translate},
67+
{id: 'user', name: 'User' | translate}
68+
]"></ng-select>
69+
</div>
5770
<div class="col-md-6 ng-select-wrapper" *ngIf="selectedUserModel.role != 'admin'">
5871
<ng-select required
5972
bindLabel="name"
6073
bindValue="id"
74+
[clearable]="false"
6175
[(ngModel)]="selectedUserModel.groupId"
6276
name="editGroup"
6377
[placeholder]="'Group' | translate"

eform-client/src/app/modules/account-management/components/users/user-edit/user-edit-modal.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ export class UserEditModalComponent implements OnInit {
1313
@Input() availableGroups: SecurityGroupsModel = new SecurityGroupsModel();
1414
@Output() onUserUpdated: EventEmitter<void> = new EventEmitter<void>();
1515
selectedUserModel: UserRegisterModel = new UserRegisterModel;
16-
newUserModel: UserRegisterModel = new UserRegisterModel;
1716
spinnerStatus = false;
1817

1918
constructor(private adminService: AdminService) {
@@ -45,4 +44,9 @@ export class UserEditModalComponent implements OnInit {
4544
} this.spinnerStatus = false;
4645
});
4746
}
47+
48+
onUserRoleUpdated(e: string) {
49+
this.selectedUserModel.role = e;
50+
this.selectedUserModel.groupId = null;
51+
}
4852
}

0 commit comments

Comments
 (0)