您的位置:首页 > 其它

新增权限

2019-05-08 16:28 288 查看
开发工具与关键技术:VS    C#
作者:宋永烨
撰写时间:2019/4/27

一个系统开放给多人使用,为了防止部分用户做出不合理操作(比如学生修改老师信息),就需要
对用户的权限进行处理,通过赋予不同的用户不同的权限,对用户的权限进新分类;
一、查询每个模块对应的权限
添加一个用户的类型然后设置该类型的用户的权限,最后添加该类型的用户,即可实现对用户的权限进行管理,但在新增之前需要先查询每个模块与模块对应的可以设置的权限,查询方法与一般的查询略有不同

查询代码较为繁琐,于是只选用不同点讲解;
需要查询的字段不在一张表中,所以需要定义一个包含全部需要查询的字段的类

这个类的字段较少,但浓缩才是精华
第一个字段:权限明细ID合集,应为一个模块右几个功能,所以一个模块对应了几个权限明细Id ,所以这个通过模块Id会查出好几个权限明细ID且都与它对应
第二个字段:操作模块的名称,在加载表格时会显示在页面上
第三个字段:一个类,记录了模块对应的权限的类,这个类有一个字段,记录了模板对应的权限
至于为什么第三个字段这么特别,在查询的时候自会明了


别的赋值只是获取一个字段,它需要去另一张表中查询字段,所以第三个字段才会是一个类,因为给第三个字段本身赋值需要通过另一个查询获取,而外层查询的类需要包括所有字段,因此第三个字段需要的类外层查询的类也需要包含它
之后就是将这些字段通过可以被表格插件接收的形式返回给页面,因为第三个字段的值有多个,所以需要通过for循环加自定义表格的形式将它赋值给页面的表格插件
二、新增用户类型
在用户与该用户匹配的每个模块的权限查询完成之后就可以进行新增的操作,新增的时候因为
数据在添加时可能会出现错误导致数据添加了一半,然后数据库中就有一些只有一般的数据,加不了,删不掉(指删正常数据时,有些判断错误数据过不了,会数据异常,删不掉),相当烦,所以通过一个事务回滚来解决问题

注:使用事务回滚需要去项目的引用中去引用才可以使用事务回滚
一般引用多在命名空间进行,但这只需要在新增时使用,所以就只在新增中引用

首先国际惯例判断传入的数据是否为空,如果想出错的可以不判断

然后通过页面传入的数据去相应的表中判断该数据是否存在,如果存在这不允许再次添加,为了防止数据重复,然后返回值提示用户 数据重复,如果不存在即查询的数据的count数据条数 等于零,就继续运行

由于添加的数据设计到多张表,所以需要一张一张添加,先添加用户类型表,给这张表的字段赋值,然后通过Add方法添加到用户类型表中即可,这里最好判断以下数据库的SaverChanges值是否大于零.如果大于零,即表示数据库发生了变化,即添加成功,防止最后添加的时候因为数据类型的问题导致某个表添加失败却未发现而产生错误数据;

获取到添加到表用户类型表之前的ID即添加的表的ID赋值给一个int类型的变量为了权限表的新增做准备

创建一个字符串数组,用来接收页面传来的数据经过分割后组成的数组
这里的分割根据逗号分割,由于本文未涉及到提交的数据的内容,所以这个剪切会让人难以理解,所以用文字描述一下传入的文件究竟是什么
由于新增权限时,每个模块都有一个或多个权限,而每个按钮又要给一个点击事件,所以为了选择每个按钮的方便与获取到每个选中的按钮的对应的操作类型ID,所以使用表格插件添加按钮时使用自定义插件,每个插件的ID都是一个固定的字符串加上操作类型ID所拼接而成的ID,在将ID传入控制器的时候,首先将它通过剪切分解成只含有操作类型ID,然后加上一个逗号,最后去掉最后一个逗号后上传到控制器,就有了通过逗号剪切数据的那一幕,至于为什么不全传入数据库再进行剪切,大概是为了减少传输的数据量,提升运行速度

通过foreach 循环存放操作类型Id的数组并赋值给s
创建权限表的实例化对象,并将之前添加到数据库的表的ID赋值给权限表实例化对象对应的字段
判断取出的操作类型是否为空,防止出现意外情况

在s不为空的情况下,将s转换为Int32类型的数据后赋值给实例化的权限表然后添加入权限表
最后需要判断数据库是否变化,如果产生变化,则说明添加成功,否则添加失败
注:权限表只有三个字段,一个主键ID与两个外键ID

提交事务:当需要回滚的内容执行完成之后,既可以提交事务了,这个过程类似于事先模拟一遍看添加是否成功,如果出现意外,就回滚(类似于撤回),如果通过了,就执行添加
将返回值赋值后返回;
总结:
查询的字段超过了单张表的字段所以需要专门创建一个类用于接收,有一个字段需要从别的表查询又需要一个类,所以查询的类需要两个,第一个查询的类有一个字段需要时第二个类
新增前的查询需要注意查询到每个模块对应的每个权限的权限Id,并且还需要通过你喜欢的方式传递个控制器
事务回滚很重要,为了防止代码在执行到一半时出现异常而导致数据传输了一般就断了,比如银行的系统在资金交易未完成就关闭了,如果没有事务回滚,那资金穿过去却没有记录,那就完蛋了,所以需要事务回滚来保证数据的完整性
页面传递的数据如果在页面剪切好后,最好用分隔符分隔一下为了使控制器剪切更加方便

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: