一、绪论
在2020年Dotnet技术日益完善的今天,我们熟知的Dotnet 开发体系有WinForm、 WebFrom、Asp.net、WPF、以及现在正火的Dotnet Core以及Microsoft将要推出的Dotnet 5。总的来说这些开发技术我都用过,今天我想到了一个问题,在WinForm中怎样做到权限分配?当然,因为我主要是写B/S的的,像WinFrom这种窗体发开的以前写过,这段时间不写了。今天写Identity Server 4的时候想到了如何在这种不依赖框架的技术上做权限分配。
二、选题背景
? 我的选题很简单,是一个烂透了的选题“图书管理系统”,角色我暂定只有两个,也是那两个在这个系统里面不可或缺的角色,“管理员”和“用户”。具体流程的话我就不赘述了,已经烂大街了。
三、核心需求
这个选题和大家接触过的需求没有太大出入,无非也就是书籍管理、信息管理、借阅管理等。那么这个的核心需求是什么呢?
我期望在系统指定了只能有读者和管理员这两个角色之外,我可以给这些人(不区分角色)分配一些权限。
-
这个场景的话,就简单想像成管理员是老师身份,而读者统一都是学生群体,但是在这些学生中有一些同学参加勤工俭学向学校“打工”赚取零花钱,所以管理图书馆的主管老师可以给这些学生相应的权限,来辅助老师。
-
至于管理员用不用给他也来个权限的管理呢?当然要来啊,因为本系统中权限最大,最全的管理员是主管图书馆的那位老师,而别的老师虽是老师,但是只是管理其相应的教学任务,不涉及图书馆的工作,但是也可能会有一些老师可能因为工作原因需要图书馆的部分权限,所以需要给管理员身份来一个权限管理。
四、实现思路
- 角色实体的分析
- 权限如何管理
- 如何在使用者登录之后限制其权限
五、具体实现
1. 角色实体
具体看图
2. 权限如何管理
这个的话我是在实体类里面进行区分,具体看代码
-
根据userSort来判断其角色(为什么没有单独的弄两张表的原因是,我考虑到有的学生可能留校成为老师,还有一个原因是,如何使用两张表的话,判断身份就要多些几行代码,懒得弄了。。)
-
关于权限的赋予,我是在数据库那边设计一个字段专门存放角色权限,具体看图
因为已经知道了系统具体有哪些权限可赋予,那么设计一个字符串型字段,通过区间指定相应权限
3、如何在程序运行中保持用户信息
我们都知道在B/S架构中,一般使用的是Cookie Session Token,我仿照Session的思路,用户登录成功后将用户的实体信息存放到一个"Session"中
这个是用户登录的代码
4、如何“跨域”
用“跨域”这俩字,就有点扯淡了。。但是暂时想不来有啥更好的,暂定用这个词吧。。。
5、检查的相应的代码
6、权限视图设计
这是设计的权限界面
如何修改呢?