Beispiel #1
0
        public async Task <IList <PermissionRoleModel> > GetAllUserPermissionsWithRolesAsync(long userId)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            var userPermissions = await SmartHomeAppDbContext.Query <UserPermission>()
                                  .Where(x => x.UserId == userId)
                                  .ProjectTo <PermissionRoleModel>(Mapper.ConfigurationProvider)
                                  .ToListAsync();

            var rolesStrings = (List <string>) await userManager.GetRolesAsync(user);

            var rolePermissions = await SmartHomeAppDbContext.Query <RolePermission>()
                                  .Where(x => rolesStrings.Contains(x.Role.Name))
                                  .ProjectTo <PermissionRoleModel>(Mapper.ConfigurationProvider)
                                  .ToListAsync();

            var comparer = EqualityComparerFactory.Create <PermissionRoleModel>(
                x => (int)x.PermissionId,
                (x, y) => x.PermissionId == y.PermissionId && string.Equals(x.RoleName, y.RoleName));
            var resultPermissions = userPermissions.Union(rolePermissions, comparer);

            resultPermissions = resultPermissions.OrderBy(x => x.PermissionName);

            return(resultPermissions.ToList());
        }
Beispiel #2
0
        public async Task <IdentityResult> AddToRoleAsync(long userId, long roleId)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            var roleName = (await SmartHomeAppDbContext.SingleAsync <Role>(roleId)).Name;

            return(await userManager.AddToRoleAsync(user, roleName));
        }
Beispiel #3
0
        public async Task <IdentityResult> RemoveFromRolesAsync(long userId, List <long> roleIds)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            var roleNames = await SmartHomeAppDbContext.Query <Role>().Where(x => roleIds.Contains(x.Id))
                            .Select(x => x.Name).ToListAsync();

            return(await userManager.RemoveFromRolesAsync(user, roleNames));
        }
Beispiel #4
0
        public async Task <IdentityResult> AddToRolesAsync(long userId, List <long> roleIds)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            // this query needs for some reason roleIds to be List
            var roleNames = await SmartHomeAppDbContext.Query <Role>().Where(x => roleIds.Contains(x.Id))
                            .Select(x => x.Name).ToListAsync();

            return(await userManager.AddToRolesAsync(user, roleNames));
        }
Beispiel #5
0
        public async Task <IList <RoleModel> > GetUserRolesAsync(long userId)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            var rolesStrings = (List <string>) await userManager.GetRolesAsync(user);

            return(SmartHomeAppDbContext.Query <Role>()
                   .Where(x => rolesStrings.Contains(x.Name))
                   .ProjectTo <RoleModel>(Mapper.ConfigurationProvider)
                   .ToList());
        }
Beispiel #6
0
        public async Task <long> AddAsync(long sensorId, double voltage, DateTime measurementDateTime)
        {
            var sensor = await SmartHomeAppDbContext.SingleAsync <Sensor>(sensorId);

            if (sensor.BatteryPowerSourceTypeId == null)
            {
                throw new ArgumentNullException(nameof(sensor.BatteryPowerSourceType), $"Sensor with id {sensor.Id} " +
                                                $"doesn't have any battery power source type, " +
                                                $"and thus can't have voltage measurements.");
            }

            var batteryMeasurement = new BatteryMeasurement()
            {
                BatteryPowerSourceTypeId = sensor.BatteryPowerSourceTypeId.Value,
                MeasurementDateTime      = measurementDateTime,
                SensorId = sensor.Id,
                Voltage  = voltage,
                PlaceId  = sensor.PlaceId.Value
            };

            return(await AddOrUpdateAsync(batteryMeasurement));
        }
Beispiel #7
0
        public async Task <bool> HasPermissionAsync(long userId, string permissionName)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            bool hasPermission = await SmartHomeAppDbContext.Query <UserPermission>()
                                 .AnyAsync(x => x.UserId == userId && x.Permission.Name == permissionName);

            if (hasPermission)
            {
                return(true);
            }

            // has role that has that permission
            var roles = (List <string>) await userManager.GetRolesAsync(user);

            hasPermission = await SmartHomeAppDbContext.Query <RolePermission>()
                            // filter only for roles that user has
                            .Where(x => roles.Contains(x.Role.Name))
                            // does the role have that permission?
                            .AnyAsync(x => x.Permission.Name == permissionName);

            return(hasPermission);
        }
Beispiel #8
0
        public async Task <IdentityResult> ChangePasswordAsync(ChangePasswordModel changePasswordModel)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(changePasswordModel.Id);

            return(await userManager.ChangePasswordAsync(user, changePasswordModel.OldPassword, changePasswordModel.NewPassword));
        }
Beispiel #9
0
        public async Task <UserModel> GetByIdAsync(long id)
        {
            var entity = await SmartHomeAppDbContext.SingleAsync <User>(id);

            return(Mapper.Map <UserModel>(entity));
        }
Beispiel #10
0
        public async Task SignOutAsync(long userId)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(userId);

            await userManager.UpdateSecurityStampAsync(user);
        }
Beispiel #11
0
        public async Task <IdentityResult> DeleteUserAsync(long id)
        {
            var user = await SmartHomeAppDbContext.SingleAsync <User>(id);

            return(await userManager.DeleteAsync(user));
        }
Beispiel #12
0
        public async Task <TemperatureMeasurementModel> GetByIdAsync(long id)
        {
            var temperatureMeasurement = await SmartHomeAppDbContext.SingleAsync <TemperatureMeasurement>(id);

            return(Mapper.Map <TemperatureMeasurementModel>(temperatureMeasurement));
        }
Beispiel #13
0
        public async Task <IdentityResult> DeleteRoleAsync(long roleId)
        {
            var role = await SmartHomeAppDbContext.SingleAsync <Role>(roleId);

            return(await roleManager.DeleteAsync(role));
        }