哪个模式用于简单的c#用户权限?

时间:2013-05-07 16:49:02

标签: c# design-patterns user-permissions

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

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

permissions

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

我学习了抽象工厂,策略,单身人士等基本模式......但我无法选择合适的模式。

如果我使用基本继承,那么我需要覆盖childs中的一些方法,因为它们继承了父级的所有方法......

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

抱歉英语不好:)


评论太长了,所以我会写在这里......

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

他希望我在我的程序中使用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 ,表单调用添加项目,他填写所有输入,点击添加和我必须要求:

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吗?

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

例如一些照片(抱歉希伯来语):

Login form

Project adding

1 个答案:

答案 0 :(得分:0)

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

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