Передача булов из одного класса в другой с помощью dto

#c# #.net #dto

Вопрос:

 public void GetUserPermission(string username)
{
    using var db = new SOSContext();
    {
        var userAccount = db.Users.SingleOrDefault(x => x.UserName == username);
        UserPermissionsDTO userPermissions = new UserPermissionsDTO()
        {
            CanManageUsers = userAccount.CanManageUsers,
            CanManageCustomers = userAccount.CanManageCustomers,
            CanManageStocks = userAccount.CanManageStocks,
            CanManageOrders = userAccount.CanManageOrders,
            CanManageDeliveries = userAccount.CanManageDeliveries,
        };
    }
 

У меня есть этот метод, который запрашивает базу данных для проверки разрешений пользователя для пользователя, который соответствует правильному имени пользователя. Я пытаюсь перенести эти сообщения пользователей в класс login.xaml.cs в моем приложении. Для этого я использую объект dto.

 class UserPermissionsDTO
{
    public bool CanManageUsers { get; set; }
    public bool CanManageCustomers { get; set; }
    public bool CanManageStocks { get; set; }
    public bool CanManageOrders { get; set; }
    public bool CanManageDeliveries { get; set; }
}
 

Проблема, с которой я сталкиваюсь, когда экземпляр объекта dto создается в методе userpermissions, если значения userpermissions являются истинными, это значение не передается в мой логин.xaml.cs. Когда я отлаживаю программу, значение всех параметров DTO для пользователей устанавливается равным значению по умолчанию false. У кого-нибудь есть предложения о лучшем способе передачи разрешений пользователя или исправления этого поврежденного кода?

использование QuickWatch для проверки значений переменных dto пользовательских пропусков

Комментарии:

1. Я думаю, вам придется показать нам, как вы переносите свой userPermissions объект в свой вид.

2. Попробуйте изменить тип возврата GetUserPermission с void на UserPermissionsDTO . Затем в вашем коде вызова (на скриншоте) измените на UserPermissionsDTO userPermissions = GetUserPermission(...)

Ответ №1:

Ваш GetUserPermission тип void , поэтому он не возвращает никакой информации вызывающему абоненту. вместо этого он должен вернуться UserPermissionsDTO . После того, как вы создали свой userPermissions dto, верните его из вызова и заставьте вызывающего абонента использовать его.

Ответ №2:

Сначала вы можете создать свой dto, передать его методу GetUserPermission и присвоить там свои значения. Затем вы можете использовать те значения, из которых вы вызвали метод. Что — то вроде этого должно сработать:

 public void GetUserPermission(string username, UserPermissionsDTO dto)
    {
        if (string.IsNullOrWhiteSpace(username)) return;

        using var db = new SOSContext();
        {
            var userAccount = db.Users.SingleOrDefault(x => x.UserName.ToLower() == username.ToLower());
            if (userAccount == null) return;
            dto.CanManageUsers = userAccount.CanManageUsers;
            dto.CanManageCustomers = userAccount.CanManageCustomers;
            dto.CanManageStocks = userAccount.CanManageStocks;
            dto.CanManageOrders = userAccount.CanManageOrders;
            dto.CanManageDeliveries = userAccount.CanManageDeliveries;
        }
    }
 

Чтобы вызвать вышеуказанный метод:

 var userPermissions = new UserPermissionsDTO();
userService.GetUserPermission(username, userPermissions);
var canManagerUsers = userPermissions.CanManageUsers;
// Map other permissions
 

Комментарии:

1. Я вызываю метод GetUserPermissions в своем классе login.xaml.cs, но я не понимаю, почему перед определением dto userpermissions я хотел бы проверить, является ли имя пользователя пустым или пустым, потому что у меня есть другой метод, называемый userlogin, который уже сделал это до выполнения кода разрешений пользователя