一般情况下,一个大的系统,一般都是有权限的,这种权限设置让用户的体验不一样。比如说,有些模块是不允许用户进行修改的,而这些一般都是程序员进行修改,程序员才可以对里面的一些功能进行调整,改正,完善。
还有一些是管理员才能使用的程序,比如一个考试的系统,就只有管理员才能打开考试里面的一些涉及试卷的答案啊,对试卷的设置啊这些功能等等。
上面那些是一般的用户不能体验的,这就是权限设置。
你想对哪些使用人员体验哪些功能的话,就直接用代码写下来,然后实现这个。
下面我用老师上课教的代码来讲一下:
如果想让用户体验如下的权限的话,那么就应该这样写
但是这个也只是一部分的权限,如果全部显示的话那就太大一张图片了,所以我只截图一部分的权限分享一下。
设置完这个之后就到通过远程请求载入信息来实现了
//$.post() 通过远程 HTTP POST 请求载入信息
$.post("/Main/SelectModularJurisdiction", { time: (new Date()).getTime().toString() }, function (objModulars) {
//console.log(objModulars);
if (objModulars == "") {
//href 设置/返回完整的URL
window.location.href = "/";
} else {
for (key in objModulars) {
var obj = objModulars[key];
if (obj.ID == 0) {
var modularName = obj.ModularName;
var elId = dirIdModlarName[modularName];
//去掉没有的权限对应的菜单
$("#" + elId).remove();
//console.log(modularName);
}
}
}
});
而到了这里才算真正地完成了对应的权限设置。
但是用户想要查看权限模块的话,就应该在控制器写代码,而最主要的一点就是运用我之前写过的一片文章的查询方法那个文章那个左查询。
想要查看哪张表就连接哪张表进行查看,而这个联表查询我之前也是有写过的,忘记的可以翻看我之前写的联表查询那篇文章。具体的我就不详细地说了,直接放图片给大家看一下:
上面的图片即是链表查询的。
这个查完之后就进行左查询了,查看另一张表共有的部分,最主要看另一张表。
//Linq 左连接(没有数据的ID为0)
var userModulars = (from tbModular in myModel.SYS_Modular
join tbTampTable in varLinq1 on tbModular.ModularID equals tbTampTable.ID into tempTable
select new
{
ModularID = tbModular.ModularID,
ModularName = tbModular.ModularName.Trim(),
ID = tempTable.Select(t => t.ID).FirstOrDefault() != null ? tempTable.Select(t => t.ID).FirstOrDefault():0
}).ToList();
如果涉及到需要转换类型的话,比如将int类型转换为ToInt32类型的就需要在查看权限之前就把它给设置了。
//将int类型转换为ToInt32类型
int userId = Convert.ToInt32(Session["UserID"].ToString());
上面那个我也是有讲过的。
开始我以为这个是没有写完功能的,就是没有完成功能的,点击不了,但是老师讲了之后才知道这个是权限的限制了,限制用户的,说避免用户乱点之后找不回来数据了。万一哪个用户无聊的话,把数据库里面的数据给删除了,那就得哭了,删了之后就找不回来了,这就亏大发了。
所以就得要有一个这个权限的维护,设置一下哪些用户能体验,哪些用户不能体验,也可以知道用户的等级是否够高,高一点的等级的权限当然是少一点的,比如一个系统里面可以分为超级管理员,管理员,普通用户等这些等级。