public static BaseApiResponse HasRightToEditUser(ApplicationUserBaseModel userDto, IPrincipal userPrincipal, CltRolesSetting setting) { if (userPrincipal.IsInRole(setting.RootRoleName)) { return(new BaseApiResponse(true, "Root может делать все что угодно")); } if (userDto.RoleNames.Any(x => x == setting.RootRoleName)) { return(new BaseApiResponse(false, "Вы не можете редактировать пользователя Root")); } var isAdmin = userPrincipal.IsInRole(setting.AdminRoleName); if (isAdmin && userDto.RoleNames.Any(x => x == setting.AdminRoleName)) { return(new BaseApiResponse(false, "Вы не можете редактировать пользователя, который является Администратором, для этого нужны права Супер-Администратора")); } if (isAdmin) { return(new BaseApiResponse(true, "Вы не можете редактировать пользователя, который является Администратором, для этого нужны права Супер-Администратора")); } return(new BaseApiResponse(true, "Вы не можете редактировать пользователя, так как у вас недостаточно прав")); }
public static bool IsInRole(this ApplicationUserBaseModel user, string roleName) { if (user.RoleNames == null) { throw new ApplicationException("Роли не установлены"); } return(user.RoleNames.Any(x => x == roleName)); }
/// <summary> /// Из модели DTO в сущность /// </summary> /// <returns></returns> public static ApplicationUser ToEntity(this ApplicationUserBaseModel model) { return(new ApplicationUser { Id = model.Id, PhoneNumber = model.PhoneNumber, Email = model.Email, EmailConfirmed = model.EmailConfirmed, SecurityStamp = model.SecurityStamp }); }
public static UserDifferenceAction GetComparingAction(ApplicationUserBaseModel userFromCookie, ApplicationUserBaseModel userFromDb, AccountSettingsModel accountSettings, RootSettings rightsSettings) { if (!userFromCookie.EmailConfirmed && userFromCookie.Email != rightsSettings.RootEmail && !accountSettings.IsLoginEnabledForUsersWhoDidNotConfirmEmail) { return(UserDifferenceAction.Logout); } if (userFromDb.DeActivated || userFromDb.PasswordHash != userFromCookie.PasswordHash) { return(UserDifferenceAction.Logout); } var compareResult = Compare(userFromCookie, userFromDb); return(!compareResult ? UserDifferenceAction.AutoReLogin : UserDifferenceAction.None); }
public static bool Compare(ApplicationUserBaseModel user1, ApplicationUserBaseModel user2) { var rightsChanged = user1.RoleNames.Count != user2.RoleNames.Count; if (!rightsChanged) { for (var i = 0; i < user1.RoleNames.Count; i++) { if (user1.RoleNames.OrderBy(x => x).ToList()[i] == user2.RoleNames.OrderBy(x => x).ToList()[i]) { continue; } rightsChanged = true; break; } } return(user1.Id == user2.Id && !rightsChanged && user1.Name == user2.Name && string.IsNullOrEmpty(user1.PhoneNumber) == string.IsNullOrEmpty(user2.PhoneNumber)); }