• Почему в истории начал появляться коммит слияния?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Это - не баг, это - результат ваших (непродуманных?) действий.
    Revert (в отличие от reset) создаает commit. Поэтому у вас в main появилась цепочка commit после точки разделения (можете посмотреть любым средством просмотра веток - да хоть git log: git log с ключом --graph после слияния покажет это достаточно наглядно. Слить такие ветки быстрой перемоткой (fast-forward), как вам удавалось делать раньше, не получится, поэтому gitу приходится создавать merge commit с двумя родителями - исходными указателями сливаемых веток.
    Основных способов выйти их такого положения - два.
    Первый - сбросить указатель ветки main на точку разделения: переключиться на нее и выполнить git reset. Если вы действительно делали только отмену (revert) и отмену отмены, то вы ничего не должны потерять. Если опасаетесь потерять - создайте перед сбросом еще одну ветку на базе текущего main, потом вытащите в случае чего изменения из нее (а вообще-то в git зафиксированные изменения так сразу не теряются, и можно обычно вытащить их даже при отсутсвии ветки).
    Второй способ - перебазировать (git rebase) ветку update на текущий указатель ветки main. Правда, в этом варианте у вас останутся в истории обе ваши отмены.
    После этого вы сможете выполнить так нравящееся вам слияние быстрой перемоткой.
    PS Есть ещё и третий вариант решения - забрать изменения из update в main с помощью cherry-pick, но в данном случае это - лишние заморочки IMHO.
    Ответ написан
  • Как сделать общий appsettings.json для разных .sol?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Можно добавить произвольные файлы JSON в конфигурацию на этапе конфигурирования приложения. Используйте для этого метод расширения AddJsonFile интерфейса IConfigurationBuilder.
    В приложениях на современном (.NET 6+) шаблоне WebApplication этот интерфейс доступен через свойство WebApplicationBuilder.Configuration, примерно так:
    var builder = WebApplication.CreateBuilder(args);
    //...
    builder.Configuration.AddJsonFile("path_and_file.json");
    Ответ написан
    1 комментарий
  • Настройка 2FA ADFS в NEXTCLOUD?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    А настроили ли вы на стороне ADFS передачу утверждения (claim) о членстве в группе , по которой вы фильтруете пользователей?
    Пример настройки утверждения членства в группе есть в документации AD FS.

    PS Имя группы на скриншоте ищите сами: я его вижу, но мне его руками набивать лень, а скопировать-вставить со скриншота нельзя. Надеюсь это вас убедит в следующий раз вставлять информацию по вопросу текстом.
    Ответ написан
    2 комментария
  • Как предотвратить закрытие окна Powershell в случае ошибки, если powershell запущен из cmd?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    cmd /k powershell ...
    Ответ написан
    Комментировать
  • Можно ли изменить автора встреч в календаре (Exchange)?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Программный доступ к календарю (и другому содержимому п/я) возможен через Excange Web Services (EWS). В частности - из PowerShell можно туда добраться через EWS Managed API - он, вообще=то предназначен для работы из C# и прочих языков для .NET, но в PowerShell, посколько он тоже на базе .NET, тоже можно его использовать. Я не подскажу, можно ли там поменять свойство автора встречи, или оно только для чтения, но, в любом случае, можно создать встречи с новым автором и скопировать в них информацию из существующих встреч уволившегося сотрудника.
    Но все это требует самого натурального программирования, т.е. это непросто, и, возможно, встречи будет проще создать заново.
    Ответ написан
    Комментировать
  • Работает ли авторизация Kerberos на Linux?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Для аутентифкации по протоколу Kerberos на сервере клиент должен предъявить билет, кторый может выдать только третья сторона (KDC), которой доверяют и клиент и сервер. А откуда он у внешнего клиента-то возьмется, если он про ваш внутренний KDC (например, контроллер домена AD) ничего не знает?
    В Windows Kerberos для аутентификации на сайте Kerberos используется в комплекте с NTLM в рамках механизма аутентификации Negotiate. Клиент, увидев, что сервер предланает ему этот механизм, запрашивает у своего KDC билет для этого сервера, а если билет получить невозможно - переходит на аутентифкацию по NTLM, и для этого как раз и запрашивается имя пользователя и пароль в пресловутом окошке. А при использовании только Kerberos пароль запрашивать не нужно.
    PS Постарайтесь не путать аутентификацию (проверку подлинности пользователя) и авторизацию (проверку разрешения на операцию).
    Ответ написан
    Комментировать
  • Как настроить SMB с двумя роутерами?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Требуется дополнительная информация. Знать, что и куда подключено по кабелю - этого недостаточно. Требуется понимние на "уровне IP" (он же - "3-й уровень модели OSI") : нужно знать таблицы машрутизации на обоих маршрутизаторах и на типичных компьютерах в каждой из (под)сетей и, главное, включен ли на промежуточном маршрутизаторе (Redmi) NAT между интерфейсами в сети 192.168.1.0/24 и 192.168.2.0/24.
    Текущая картина похожа на то, что NAT включен. Если так, то вы из сети 192.168.1.0/24 к серверу в 192.168.2.0/24 не подключитесь - разве что, сервер у вас один, и вы прокинете на него 445 порт с Redmi, и работать это может только, если на Redmi нет Samba или другого сервера SMB, слушающего на этом порту.
    Чтобы после отключения NAT в сети 192.168.2.0/24 интернет не пропал, надо на Keenetic прописать маршрут к этой сети через интерфейс Redmi в сети 192.168.1.0/24. В принципе, этого должно хватить и для подключения к серверу по IP. Если не хватает - прверьте брандмауэр Windows на сервере, и разрешите подключение по SMB из сети 192.168.1.0/24 (по умолчанию ЕМНИП там разрешено подключение только из непосредственно подсоединенной (под)сети).
    Для подключения по имени сервера нужно настроить разрешение имен между этими сетями: по умолчанию все простейшие протоколы разрешения имен - NetBIOS и пр. - работают только в пределах одной (под)сети. Как это сделать с вашим оборудованием - это я так сразу не подскажу: информации недостаточно.
    Ответ написан
  • Какими настройками разрешений запретить открытие файла?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    1. Назначить для User1 стандартное разрешение "Список содержимого папки"
    2. Убедиться, что нет менее ограничивающих разрешений для каждой из групп (и псевдо-групп, типа "Прошедшие проверку"), куда входит User1.

    PS По жизни разрешения лучше назначать не отдельным пользователям, а группам. Т.е., в данном случае - создать группу, куда входит только User1 и дать разрешения этой группе. Так будет проще что-нибудь поменять, когда потребуется: заменить User1 на другого пользователя и т.п. А по жизни поменять что-нибудь потребуется обязательно.
    Ответ написан
    3 комментария
  • Есть ли такая архитектура?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть несколько соображений.
    Сображение первое, глубоко теоретическое. Логическая структура конкретного приложения - это вопрос специфичный именно для приложения. Думать о ней в терминах соответствия некой теоретической "архитектуре" (тем более - "чистой архитектуре") - это самоограничение, достойное только зеленых новичков. Настоящие программисты не используют чистую архитектуру. Кароче, как вы приложение напишете, такая у него архитектура и будет. Возможно, если ваше приложение будет в чем-то замечательным, то эта архитектура войдет в учебники по этой самой архитектуре, в качестве примера (может - положительного, но, скорее, отрицательного ;-) ). Но пока что вам нужно решать практические вопросы, и шаблоны т.н. "архитектуры" могут служить только в качестве подсказки, а решать придется вам, из чисто практических соображений.

    Соображение второе, практическое. Раз, как вы пишете "Domain содержит только сущности, Enum'ы", то выбросьте из головы слово Domain, оно вас только запутывает. Потому что намекает на DDD, а то, что у вас есть, в DDD обзывают "анемичной моделью", и сильно не любят. Т.е. сейчас, с нынешней структурой приложения, DDD - оно не про вас.

    Так что, по факту, у вас есть два слоя абстракций, описывающих функции классов и методов: UI и Application. И я подозреваю, что логика приложения - классы и методы, отнесенные к Application - использует в качестве средства доступа к БД EF напрямую. То есть - что там прямо в коде используются сущности под названием DbContext и DbSet.

    А это означает, если по жизни, что от EF вы в таком раскладе никуда впоследствии не денетесь. Хорошо это или плохо - решать вам. Однако о намерении прибить гвоздями свое приложение к EF вы не упоминали и, предполагаю, не думали. Если это так, то задумайтесь именно об этом. Не о замене БД - EF может работать поверх разных БД, так что к MS SQL вы, по факту, с EF привязаны не будете (ну, разве что, сами того очень захотите).

    А задуматься надо: EF - штука неоднозначная. Она, подобно любому средству ORM, полна абстракций, которые, так скажем, не совсем хорошо ложатся на логическую структуру реляционных БД, а потому в них есть заметные дыры, через которые эта структура будет проглядывать. В частности, это нередко касается вопросов производительности.

    Но если вы выберети жизнь EF и ни с чем другим, то о Repository и UoW можете больше не думать: EF будет для вас и тем, и другим.

    Кароче, выбирайте.
    Ответ написан
    7 комментариев
  • В чем причина ошибки Ms exchange 2013?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Эта ошибка означает, что возникло исключение при обработке некого сообщения. Не исключено (но и не факт), что это произошло из-за вмешательства этой самой DLP системы.
    Сообщение вызывающее исключении при обработке, помещается в очередь Poison message queue. Смотрите там - если сообщение есть, конечно: например, ваша DLP могла его удалить внезапно для службы транспорта Exchange, тип исключения вполне такому сценарию соответствует. Если подозреваете DLP - сопоставьте ваш лог Exchange с логом DLP на момент возникновения исключения, чтобы понять, что делала в этот момент DLP.
    Ответ написан
    3 комментария
  • Как написать свой кастомный EditorFor и получить значение свойства модели?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    У вас в поле _helper класса FormHelper<TModel> конструктор сохраняет ссылку на интерфейс IHtmlHelper<TModel>.
    Этот интерфейс содержит свойство ViewData типа ViewDataDictionary<TModel>. А в этом типе реализовано свойство Model (типа TModel), которое даст вам ссылку на экземпляр класса (типа TModel) модели для представления/страницы.
    Ну, а дальше, раз вы знаете имя нужного вам свойства объекта и имеете ссылку на экземпляр этого объекта, то можете получить значение этого свойства: либо через составление с последующей компиляцией и вычисление выражения, возвращающего его значение, либо через отражение.
    Как-то так.
    Ответ написан
    1 комментарий
  • Как переименовать папку `archive` в `Archive`?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    А в чем сложность? В командной строке, в той папке где эта пака archive находится, выполните команду:ren archive Archive - и папка будет переименована.
    Ответ написан
    Комментировать
  • Как удалить сессию из БД после истечения срока?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В ASP.NET Core есть стандартный механизм сеансов (ISession): https://learn.microsoft.com/aspnet/core/fundamenta...
    Работает он на базе распределенного кэша (IDistributedCache), который штатными средствами можно базировать на MS SQL и на Redis (и, возможно, есть дополнительные сторонние пакеты для базирования на других СУБД,). Идентифкатор сессии хранится в куки (настраеваемой), по умолчанию - HTTP-only (но это настраивается).
    Механизм устаревания сеансов там есть, параметры тоже можно настроить.
    Кароче, если нет причин обязательно делать свой велосипед (типа, для учебной задачи) можно использовать этот стандартный механизм.
    Правда идея использовать этот механизм именно для авторизации у меня вызывает некоторые неясные опасения: он, вообще-то, не для того сделан. А именно для авторизации (плюс аутентифкация) в ASP.NET Core тоже есть штатное решение (Identity и политики авторизации). И вообще, аутентифкация/авторизация - это такое место, где легко накосячить, а потому лучше там обходиться без своих велосипедов.
    Ответ написан
    3 комментария
  • Как добавить в файловый сервер пользователей из домена?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    По вопросу имею сказать
    1. Домен почти наверняка чинится. Как чинить - зависит от того, как переносили контроллер, и как выглядит сейчас сломавшийся. Если будет информация (здесь в Вопроснице, лучше - другим вопросом) готов посодействовать.
    Самое простое - если переносили миграцией виртуалки и старая виртуалка на ESXI жива: запустить ее и перенсти по уму: поднять второй КД на новом месте (железо или другая виртуалка), убедиться что среплицировались и AD, и SYSVOL (готов подсказать в деталях, как именно) и штатно понизить исходный КД. Потом по желанию - переименовать новый в старый (некоторым это зачем-то надо).
    2. Если все совсем плохо то можно создать нужных локальных пользователей (и локальные группы) на файл-сервере, и позаменять старые SID в списках разрешений на SID этих пользователей (и групп) утилитой subinacl,exe. Примерная форма команды -
    subinacl /subdirectories "Z:\*.*" /replace=S-1-5-1-2-3-4-5=SERVER\user
    . Когда-то, когда ADMT ещё не было, это было практически штатным способом мигрировать файл-сервер в другой домен, была даже статья с описанием процедуры в MS Knowledge Base (к сожалению, не пережила инноваций). Однако в интернетах ещё можно нарыть кое-каких примеров
    Но вот соответствие пользователей и SID без живого КД посмотреть, увы, негде, придется применить творческий подход.
    Как-то так.

    PS Советы в каментах - жуть! Ну, кроме тех, которые от Роман Безруков, те - норм.
    PPS И ещё раз напоминаю - делайте бэкапы.
    Ответ написан
    7 комментариев
  • Как сообщить DNS серверу о смене айпи?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    ipconfig /registerdns
    Ответ написан
    2 комментария
  • Как обеспечивается уникальность IPv4 адресов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Хосты источником информации о маршрутах IPv4 (и, в частности, об адресах, доступных через интерфейсы маршрутизатора) не являются в принципе. Вся информация о подключенных к маршрутизатору адесах и их диапазонах (подсетях) создается исключительно на маршрутизаторах и распространяется между ними по протоколам маршрутизации.
    Спуфинг IP отправителя возможен, но только в одну сторону, в исходящих пакетах - и то, если не настроена фильтрация на интерфейсе маршрутизатора,к которому подключен хост или нижестоящий маршрутизатор. Ответные пакеты, однако, такому отправителю не дойдут (по крайней мере, из-за пределов локальнного сегмента).
    Ответ написан
    Комментировать
  • Как найти и настроить процесс, который грузит систему под 100%?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Именно процессы - их надо смотреть на вкладке Подробности. Но вам это не поможет - у вас диск нагружает общий процесс служб - которых там много, сами видите.
    Можно попытаться понять, какая именно служба нагружает диск в Мониторе ресурсов. Он отображает конкретные файлы, к которым идет доступ (на вкладке Диск). Запустить его можно с вкладки Быстродействие Диспетчера задач.
    Ответ написан
    Комментировать
  • Причины сбоя проверки реплики при добавление контроллера win server 2012r2 на win server 2022?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Функциональных уровней в AD - два разных: домена и леса.
    Проверьте функциональный уровень леса (в AD Domains & Trusts, например). Если надо (а это почти 100%) - повысьте.
    Ответ написан
    Комментировать
  • Как правильно спроектировать бд?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Делайте связи в обратную сторону - добавьте в таблицы user, и game внешние ключи на promo. EntityId в таком случае просто не нужен (ну, или его можно сделать первичным ключом в promo).
    Ответ написан
    Комментировать
  • GPO разделение прав ПК и RDP?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если делаете ограничение в политике на пользователей, которые ограничени не должны действовать на терминальном сервере, то в политике(ах) компьютера, действующей(их) на терминальный сервер следует включить настройку замыкания групповой политики в режиме замены, а все нужные настройки сделать в политике(ах) пользователей, применяемых к терминальному серверу - в режиме замыкания настройки берутсяя оттуда.
    Тогда не потребуется никакой фильтрации.
    Ответ написан