/// <summary> /// Creates the user. /// </summary> /// <param name="user">The user.</param> /// <param name="password">The password.</param> /// <param name="roles">The roles.</param> /// <exception cref="System.ArgumentNullException"> /// user /// or /// password /// </exception> /// <exception cref="System.Exception"> /// Already exists a user with this name. /// or /// The roles for the user are not valid. /// or /// </exception> public static void CreateUser(User user, string password, HealthRolesEnum roles) { if (user == null) throw new ArgumentNullException("user"); if (string.IsNullOrEmpty(password)) throw new ArgumentNullException("password"); // // no existe el usuario? if (ExistUser(user.UserName)) throw new Exception("Already exists a user with this name."); // // es un rol válido?} if (!IsValidRol(roles)) throw new Exception("The roles for the user are not valid."); try{ // iniciar transacción UnitOfWork.BeginTransaction(IsolationLevel.ReadCommitted); // // ajustar propiedades base del usuario user.UserStateId = SettingAppService.GetSettingValue<int>("ActiveUserState"); user.Salt = GenerateSalt(); user.Password = GetHashForPassword(password, ConfigurationManager.AppSettings["Health:EncriptionKey"], user.Salt); // // adicionar el usuario al contexto user.ObjectState = ObjectState.Added; UserServiceClient.AddUser(user); // // guardar los cambios UnitOfWork.SaveChanges(); // // asignar los roles al usuario AssignRol(user.UserName, roles); // // confirmar transacción UnitOfWork.Commit(); } catch (Exception ex){ UnitOfWork.Rollback(); throw new Exception(string.Format("Cannot create the user '{0}'.", user.UserName), ex); } }
//public static void ActivateUser(string userName) //{ // SetUserState(userName, GetValueFromSetting<int>("ActiveStateId")); //} /// <summary> /// Assigns the rol. /// </summary> /// <param name="userName">Name of the user.</param> /// <param name="roles">The roles.</param> /// <exception cref="System.ArgumentNullException">userName</exception> /// <exception cref="System.Exception"></exception> /// <exception cref="System.ArgumentException">userName</exception> public static void AssignRol(string userName, HealthRolesEnum roles) { if (string.IsNullOrEmpty(userName)) throw new ArgumentNullException("userName"); //if (IsValidRol(roles)) throw new ArgumentException("The rol is not valid."); // // buscar el usuario var user = GetUser(userName); try{ // la variable "rol" puede tener varios roles, así que obtener los valores de cada rol en un arreglo var valuesOfRoles = (from int v in Enum.GetValues(GeoRolesEnumType) where ((int)roles & v) != 0 select v).ToList(); // // determinar cuáles son los nuevos roles asignados al usuario var newRolValues = (from vr in valuesOfRoles where user.UserRoles.Any(ucr => ucr.RoleId != vr) select vr); // // iterar los nuevos roles para cargarlos a la tabla foreach (var newUserRole in newRolValues.Select( rolValue => new UserRole{ RoleId = rolValue, ObjectState = ObjectState.Added })) user.UserRoles.Add(newUserRole); // // guardar cambios UnitOfWork.SaveChanges(); } catch (Exception ex){ throw new Exception(string.Format("Cannot assign the roles to the user '{0}'.", userName), ex); } }
/// <summary> /// Determines whether [is valid rol] [the specified rol]. /// </summary> /// <param name="rol">The rol.</param> /// <returns><c>true</c> if [is valid rol] [the specified rol]; otherwise, <c>false</c>.</returns> private static bool IsValidRol(HealthRolesEnum rol) { // convertir el valor de la enumeración a un número var rolValue = (int)rol; // // si no hay un rol salir if (rolValue == 0) return false; // // a continuación testearemos los 32 bits del valor del rol (rolValue) // 1- crear un valor entero con valor inicial 1 // 2- testear el bit del valor de la enumeración (rolValue) // 3- desplazar el bit hacia la izquierda para testear el siguiente bit for (var i = 1; i > 0; i <<= 1){ // bit activo? if ((rolValue & i) == 0) continue; // // verificar que el valor sea un rol válido if (!Enum.IsDefined(GeoRolesEnumType, i)) return false; } return true; }
/// <summary> /// Determines whether [is unique role] [the specified rol]. /// </summary> /// <param name="rol">The rol.</param> /// <returns><c>true</c> if [is unique role] [the specified rol]; otherwise, <c>false</c>.</returns> private static bool IsUniqueRole(HealthRolesEnum rol) { return Enum.IsDefined(GeoRolesEnumType, rol); }
// ReSharper disable once UnusedMember.Local /// <summary> /// Gets the rol names. /// </summary> /// <param name="rol">The rol.</param> /// <returns>IEnumerable{System.String}.</returns> private static IEnumerable<string> GetRolNames(HealthRolesEnum rol) { return (from HealthRolesEnum v in Enum.GetValues(GeoRolesEnumType) where ((int)rol & (int)v) != 0 select Enum.GetName(GeoRolesEnumType, v)).ToArray(); }
/// <summary> /// Gets the name of the rol. /// </summary> /// <param name="rol">The rol.</param> /// <returns>System.String.</returns> private static string GetRolName(HealthRolesEnum rol) { return IsUniqueRole(rol) ? Enum.GetName(GeoRolesEnumType, rol) : null; }