В Windows Form payroll приложение, использующее шаблон MVP
(для небольшого клиента), я планирую обработку прав пользователя следующим образом (на основе разрешения), поскольку в основном его реализация должна быть менее сложной и простой.
ПРИМЕЧАНИЕ. Систему можно одновременно использовать несколькими пользователями (максимум 3), а база данных - на стороне сервера.
Это мой UserModel
. У каждого пользователя есть список разрешений для них.
class User
{
string UserID { get; set; }
string Name { get; set; }
string NIC {get;set;}
string Designation { get; set; }
string PassWord { get; set; }
List <string> PermissionList = new List<string>();
bool status { get; set; }
DateTime EnteredDate { get; set; }
}
Когда пользователь войдет в систему, он сохранит текущего пользователя в памяти.
Например, в представлении BankAccountDetailEntering
я могу управлять разрешением на доступ к командной кнопке следующим образом.
public partial class BankAccountDetailEntering : Form
{
bool AccountEditable {get; set;}
public BankAccountDetailEntering ()
{
InitializeComponent();
}
private void BankAccountDetailEntering_Load(object sender, EventArgs e)
{
cmdEditAccount.enabled = false;
OnLoadForm (sender, e); // Event fires...
If (AccountEditable )
{
cmdEditAccount.enabled=true;
}
}
}
В этой связи мои все ведущие докладчики (например, BankAccountDetailPresenter) также должны знать об UserModel
а также соответствующую бизнес- Model
она представляет для View
.
class BankAccountDetailPresenter
{
BankAccountDetailEntering _View;
BankAccount _Model;
User _UserModel;
DataService _DataService;
BankAccountDetailPresenter( BankAccountDetailEntering view, BankAccount model, User userModel, DataService dataService )
{
_View=view;
_Model = model;
_UserModel = userModel;
_DataService = dataService;
WireUpEvents();
}
private void WireUpEvents()
{
_View.OnLoadForm += new EventHandler(_View_OnLoadForm);
}
private void _View_OnLoadForm(Object sender, EventArgs e)
{
foreach(string s in _UserModel.PermissionList)
{
If( s =="CanEditAccount")
{
_View.AccountEditable =true;
return;
}
}
}
public Show()
{
_View.ShowDialog();
}
}
Поэтому я обрабатываю разрешения пользователя в итерации ведущего через список. Должно ли это выполняться в Presenter
или в View
? Какие-нибудь другие более перспективные способы сделать это?
Благодарю.
"Ведущий действует на модель и представление. Он извлекает данные из репозиториев (модели) и форматирует их для отображения в представлении". - MVP
Таким образом, ведущий форматирует данные, но для меня это похоже, что презентатор содержит вид бизнес-логики - он действительно проверяет, может ли пользователь модифицировать учетную запись. Что делать, если вы забыли этот чек в одной из форм? Таким образом, он должен находиться в базовом слое (возможно, службе).