我有一个具有用户名/密码的程序。每个用户都有一个“安全级别”,现在(因为我们仍处于应用程序的早期阶段),有两个选项:“管理员”和“关联”。在软件级别,对助理级别帐户有硬编码限制,对管理员级别帐户没有限制。
然而,我们需要比这更多的多样性。有些用户只需要访问应用程序中的一个屏幕,有些用户需要访问多个屏幕,等等。有很多不同的选项。这些是我想到的解决方案:
- 具有硬编码限制的多个安全级别。- 我认为这将是最简单的,但我认为这不是一个好主意,因为那样安全级别列表似乎太临时了。IE,我将需要“此用户需要查看屏幕 x、y 和 z,但仅此而已”,因此我们只需编写新的安全级别并对这些限制进行硬编码。更糟糕的是,每个硬编码的安全级别都需要解释,否则更改级别的管理员将不知道他将其更改为什么。
- 带有屏幕的“自定义”安全级别,允许管理员选择每个自定义帐户可以看到的屏幕。- 这是我的理想方法,但我试图在数据库级别上对此进行概念化。
对于#2,我认为我必须创建两个表:
Table: custom_user_permission
| user_id | screen_id |
--|---------|-----------|
1 | 5 | 1 |
2 | 5 | 2 |
3 | 5 | 3 |
4 | 12 | 1 |
5 | 4 | 2 |
另一个:
Table: screen:
| id (PK) | screen_name |
--|---------|------__-----|
1 | 1 | Screen x |
2 | 2 | Screen y |
3 | 3 | Screen z |
我不知道这将如何在软件级别上解释,但是......也许不是第二个表,而是定义哪个screen_id
适用于软件级别的哪个屏幕会更好。这将使“screen_id”成为数据库上的任意整数,使其难以阅读。
- 1 和 2 的混合- 也许允许管理员创建自己的安全级别配置文件。但就复杂性而言,这就像两者中最糟糕的一样。:)
有人有建议吗?我的想法是,这将是一个非常普遍的问题,对吧?