#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, который уже сделал это до выполнения кода разрешений пользователя