2020-08-18

   不知各位有没有在做案例时遇到这样的一个困境,怎样让我登入一个系统后让菜单栏显示我登入的这个账号相关联的模块。如果遇到这种情况该如何去做,那么像这种情况就是权限的问题。首先呢就是你登入的这个账号要在数据库中有它相对应的要管理模块,然后对这些模块进行查询,把没有查询出来模块进行移出移出这个模块的标签。像这样的方法也是会有缺点的就是欺骗了浏览器,当跳转的路径链接被发现后在浏览器中输入这个链接还是会访问这个模块(见底部图3)。

在这里插入图片描述

图(1)模块没被隐藏之前

在这里插入图片描述

图(2)模块隐藏之后

像这样的情况是无法满足我们的需求,那么还有第二套方案。思路:首先要知道总的模块有多少,然后登入后账号后显示账号管理的模块,也就是说从总共的模块里面显示一部分模块,然而剩下的模块不显示。

这样的话就可以建立一个全局的过滤器,这个过滤器可以将不显示的模块进行返回,可以返回到一个让它没有权限访问的页面,然后显示可以显示的模块。为了实现这个方法你所创建的区域名和控制器的名称要和数据库表格里面的名称所对应,如果对应不上就算是写了效果也不会出来。

如果对应的上就在Global.asax中注册全局过滤器,有必要的话也会创建全局过滤器所需要的类,注册全局过滤器FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);过滤器也分很多种,有在执行控制器里面的方法之前执行过滤器里面的方法,有在执行控制器里面的方法之后执行过滤器里面的方法,这里用的是在方法之前执先行过滤器里面的方法。列如创建像下面这样的过滤器方法:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//全局默认的过滤器-错误处理
filters.Add(new HandleErrorAttribute());
//添加自定义的过滤器
filters.Add(new PermissionFilter());
}
过滤器方法有了就需要创建过滤器的类这个类是实现过滤的,所以在这里面写方法先获取url(链接)的绝对路径用变量接收,判断链接是否是登录页面是就跳过登录检查的URL,因为不能验证登录不然就进不去,与登录页面上相关的链接也要跳过。然后获取登入账号的ID在登入的时候获取这个账号管理的模块,当然是写在验证登入哪里写代码,像这样写的好处就是响应快不用每次都去请求数据库,不好的地方就是这个账号管理的模块进行修改后,必须重新登入才能获取到新的权限模块。

然后就是对URL路径进行分割,分割是把区域名、控制器名称和创建视图的名称(Action)进行分割出来,然后就进行判断判断区域和控制器,因为这里是直接拿控制器的名称作为模块的名称进行判断,所以要保证数据库里面的模块名称和控制器中的模块名称一致。如果判断出来是不相等就跳转到没有权限的页面上,否则就跳转到这个账号管理的模块页面上。这样就解决了即使链接被发现了也无法访问这个页面。

在这里插入图片描述
图(3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值