- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
foreach (Admin _admin in _admins.Where(a => a.Login == _login))
{
if (_admin.Password == _password)
{
SessionObj = new Al2AllAuth
{
AccessId = _admin.Type,
Ename = _admin.Name,
Whoid = _admin.Id
};
var _type = (AdminTypes) _admin.Type;
switch (_type)
{
case AdminTypes.FirstType:
return RedirectToAction(c_adminActionName, c_userControllerName);
case AdminTypes.SecondType:
if (string.IsNullOrEmpty(model.Page) || string.IsNullOrEmpty(model.Uid))
throw new ArgumentException(InternalResources.EmptyPageOrUid, "model");
return RedirectToAction(model.Page, new { uid = model.Uid });
default:
break;
}
}
else
{
return RedirectToAction(_errorActionName);
}
}
Лямбда в foreach очен смутила... Зачем?
И даже если там хеш - то без соли. Ибо соль надо как-то извлекать из записи о юзере, а тут этого не делают.
P.S. Ну разве что там не рандомная соль, а нечто на основе логина.
.where() видимо возвращает коллекцию элементов, для которых лямбда вернула истину, а потом по этой коллекции итерируемся.
А вот строка 3 - это да.
И никакого цикла вообще не нужно.
admin 123456
admin 654321
Эта такая ловушка для того чтобы код был плохо модифицируемый. Вот захочется написать if(...) break; И всё. Будете кидать исключение. А темболее if(...) continue; написать не получится
> if(...) continue; написать не получится
Какого хуя лешего в базе делают два админа с одинаковым логином? :)
Этот foreach тут по сути как if юзается. И его тело исполняется по-любому или один раз, или вообще ни разу...
Уже пару раз наталкивался на то, что коллегам лень перегрузки глянуть.
.where() возвращает коллекцию, удовлетворяющую условию, потом уже с ней работает foreach
Но на самом деле - всем пофиг. Раз не юзают базу или хотя бы что-то более шустрое чем последовательный поиск - админов там по пальцам сосчитать можно, и никакого тормоза само собой не будет :)
читаем документацию, если тебе будет так понятнее, то возвращается новая коллекция
проекция возвращается из Where, а дальше по ней уже работает foreach, т.к. она реализует итератор.