在采用MVP模式的Windows窗体工资单应用程序中(对于小规模客户端)我正在按如下方式规划用户权限处理。(基于滚动)
注意:少数用户可以同时使用系统(最多3个),数据库位于服务器端。
数据库中的用户表。
USER (user_id[pk], name, access_level, status)
PERMISSION (permission_id[pk], permission_detail)
USER_PERMISSION (user_id[pk][fk], permission_id[pk][fk])
我会维护USER
表中的用户列表和PERMISSION
表中的权限列表(权限详细信息是可访问的模块名称)。中间表USER_PERMISSION
将使用权限映射用户。 UESR
和PERMISSION
表格与1:M
表格有USER_PERMISSION
个关系。
当用户登录系统时,首先系统将验证用户是否有效,然后将显示主屏幕,并且记录的用户的ID
将保存在全局变量中(所有演示者均可访问)课程)。当用户尝试访问特定模块时,系统将读取该全局变量以查找当前用户的ID
,然后它将在USER_PERMISSION
表中查找是否存在与该用户ID相关的条目以及用户尝试登录的模块名称。如果有和入口,则用户将被授予对该特定模块的访问权限。
当用户注销时,将清除保存当前用户ID的变量。
在这种方法中,可以将当前用户的ID
保存在应用程序内存中吗?或者应该写入本地文件?
应该跟踪对表中数据的修改,为此,我应该在每个表上保留一个单独的列(应该监视一个列)以保存正在修改的用户的ID
记录?
修改:
SQL-SERVER
用户名/登录吗?并且此用户操作登录内容是否可以移交给SQL-SERVER
?在Read/Write
中控制Forms
权限时,相应的Presenter
会处理逻辑并设置View
中的属性(IsModifyAllowed{get;set;}
等属性,{{ 1}}等)根据当前用户权限。因此,View可以通过IsDeleteAllowed{get;set;}
中的enabling / disabling
控制器来处理剩下的事情。
在这种方法中,每个模型都应该具有匹配的属性,就像在视图中一样(在这种情况下为View
等)?
在这种情况下,使用最广泛的方法是什么?
答案 0 :(得分:1)
您在问题的第一部分中所描述的内容非常常见,尽管它实际上不是基于角色的,而是基于权限的。
虽然没有安全机制,但这并不是一个完美的解决方案。但它很简单而且很有效。
回答你的问题。
简而言之,这是你必须自己解决的问题,因为人们已经有成千上万的方式(如果不是数百万)。做一些研究,并试着想出在你的情况下最有效的方法。