Модель безопасности на основе разрешений

1

В 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? Какие-нибудь другие более перспективные способы сделать это?

Благодарю.

Теги:
permissions
winforms
mvp

1 ответ

1
Лучший ответ

"Ведущий действует на модель и представление. Он извлекает данные из репозиториев (модели) и форматирует их для отображения в представлении". - MVP

Таким образом, ведущий форматирует данные, но для меня это похоже, что презентатор содержит вид бизнес-логики - он действительно проверяет, может ли пользователь модифицировать учетную запись. Что делать, если вы забыли этот чек в одной из форм? Таким образом, он должен находиться в базовом слое (возможно, службе).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню