@@ -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 {
0 commit comments