权限

7 篇文章 0 订阅
开发工具与关键技术:vs与mvc js
作者:执~漠
撰写时间:202087日星期五

权限的原理:
第一张表是用户表:因为要设置权限时,要知道你的用户账号是否存在于这个数据库里。因为只有存在的账号才有最基本的权限,就是能登陆进这个系统里面。
第二张表是用户类型(角色)表:你的账号能进入这个系统之后,再判断你的账号是属于那个角色的。因为不同的角色,有不同的权力。
第三张表是用户类型明细表:这张表是标记用户表对用户类型(角色)表的关系,它们的关系是多对多的关系。一个账号可能是对应多个类型,一个类型也可以有多个账号。这个意思就是用户表于用户类型表(角色)表是多对多的关系。要怎么创建这个多对多的表格呢?首先把用户表和用户类型表它们的主键ID,用来做这个表的外键ID从而达到多对多的关系。
第四张表是模块表:这个表要对应是你系统里面的功能模块。这个表是控制每个不同的用户类型对每个模块的使用权力的大与小。这个表控制了不同的用户类型能看见的模块。
第五张表是操作表:这个表是对每个模块里面的每个功能点进行控制。这个表控制了个用户类型能对那些模块进行那些操作的表。
第六张表是模块明细表:这个表是标记模块表对操作表的关系,它们的关系是多对多的关系。意思是不同的模块里面有不同的操作。这个意思是模块表对操作表的关系。要怎么创建呢?首先把模块表和操作表它们的主键ID,用来做这个表的外键ID从而达到多对多的关系。
实现的方法:
 隐藏跳转页面的按钮(原理是欺骗浏览器)。
首先声明一个对象,一个菜单名和页面按钮id匹配相匹配的对象。
通过登录的角色来判断该角色能操作那些模块

if (Session["UserID"] != null)
{
  int userId = Convert.ToInt32(Session["UserID"]);
  //读取权限信息
var tempModulars = from tbPermission in myModel.S_Permission 
join tbModule in myModel.S_Module on tbPermission.moduleID equals tbModule.moduleID
  join tbUser in myModel.S_User on tbPermission.UserTypeID equals tbUser.userTypeID
  where tbUser.userID == userId && tbModule.blFun == false
  select new
    {
        ID = tbModule.moduleID,//模块ID
        Name = tbModule.moduleDescrible.Trim()
    };
  //输出演示
  var ttt = tempModulars.ToList();
  //外连接(左连接:全部数据来源于S_Module)
  var userModulars = (from tbSysModular in myModel.S_Module
join tbTempModulars in tempModulars on tbSysModular.moduleID equals tbTempModulars.ID into temp
                      select new
                      {
                           ModularID = tbSysModular.moduleID,
                           ModularName = tbSysModular.moduleDescrible.Trim(),
                           ID = temp.Select(t => t.ID).FirstOrDefault() != null ? temp.Select(t => t.ID).FirstOrDefault() : 0
                     }).ToList();
return Json(userModulars, JsonRequestBehavior.AllowGet);               
}

查询可以操作的模块后,用左连接来查询模块表里面的模块ID是否存在这个用户能操作的权限,如果这个用户不能操作的权限ID让这个ID等于0,然后返回给页面

$.post("/Main/SelectModularJurisdiction", { time: (new Date()).getTime().toString() }, function (objModulars) {
                //console.log(objModulars);
                if (objModulars == "") {
                    //权限为空,跳转页面
                    window.location.href = "/";
                }
                else {
                    //不为空
                    for (key in objModulars) {
                        var obj = objModulars[key];
                        //获取ID==0说明没有匹配到数据
                        if (obj.ID == 0) {
                            //提取模块名称
                            var modularName = obj.ModularName;
                            //使用模块名称匹配页面中的按钮
                            var elId = dirIdModlarName[modularName];
                            console.log(elId);
                            //根据ID选择器移除按钮
                            $("#" + elId).remove();//去掉没有的权限对应的菜单
                        }
                    }
                }
            });

通过objModulars返回的结果进行判断,如果为空时就跳转空页面,不为空时判断哪些功能该隐藏哪些功能该显示,不过这样的缺点是如果知道链接还是能直接访问到相关的页面

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值