0

我需要一个建议。我正在开发一个管理大学学生项目的程序。(我自己学生,这是我第二年的项目)。使用 c# .NET 4,WINFORMS。

我有不同的用户具有不同的权限。我不想使用重量级的解决方案,例如使用 DB、添加 GROUPS、...

权限

我想要一个非常简单的解决方案,并且我需要为此使用至少 23 种编程模式中的一种。

我了解了抽象工厂、策略、单例等基本模式……但我无法选择正确的模式。

如果我使用基本继承,那么我需要覆盖孩子中的一些方法,“什么都不做”,因为它们继承了父母的所有方法......

有任何想法吗?主要目标是使用设计模式。

对不起英语不好:)


评论太长了,我就写到这里吧……

我知道我只需要在需要的地方使用模式。但是,去告诉我的老师 =))

他希望我在我的程序中使用 3 种模式。例如,我使用 Singleton 连接到 MySQL。

所以我需要再使用 2 种模式。

这个怎么运作。有人进入系统。我在静态类 Auth 中创建“指针”以登录用户:

static class Auth
{
   public static CommonUser _currentUser;

   public static CommonUser getUser()
   {
      return Auth._currentUser;
   }
}

例如,如果老师已登录,那么我会这样做:

Auth._currentUser = new Teacher(id, name, blablba, blabla, blabla);

如果他想添加,比如说,新项目,他点击按钮ADD PROJECT,表单 Add Project 被调用,他填写所有输入,点击ADD我必须要求:

Auth._currentUser.addProject(projectId, projectTitle, ....);

如果管理员登录到系统,那么为了添加新项目,我会:

Auth._currentUser = new Admin(id, name, blablba, blabla, blabla);

然后调用相同的方法。

Auth._currentUser.addProject(projectId, projectTitle, ....);

但是这里的metod addProject 是一样的,所以我必须使用继承。

但是,如果 Seretary 登录了,我会这样做:

Auth._currentUser = new Seretary(id, name, blablba, blabla, blabla);

秘书必须无权执行以下操作:

Auth._currentUser.addProject(projectId, projectTitle, ....);

那么我需要覆盖秘书类中的 addProject 方法并将其设为空,还是调用 MessageBox?

类似的东西......所以,他希望我在这里使用一个模式:-/说......如果我需要添加其他具有不同权限的人,所以我不需要在我的所有程序中进行更改。 ..

例如一些图片(对不起希伯来语):

登录表单

项目添加

4

1 回答 1

0

一种方法是使用命令(或动作)模式,其中每个操作(例如Add Research)都封装在一个对象中。这允许在实际执行操作之前在中心位置检查权限。

实际的权限检查通常通过将用户映射到角色/组并为每个组定义一组允许的操作来完成。这可以使用 Microsoft的Authorization Manager或数据库中的简单角色表来实现。

于 2013-05-07T20:19:18.300 回答