现在做一个管理系统其中权限分类很多,有些没有权限的用户将看不到部分链接,服务器端已经做了验证,请问客户端如何实现不显示没有权限的连接。
个人想到的一个方案是每一个url上加一个标记,然后用Html Agility Pack,在输出到客户端之前做一些操作,但是现在还未尝试是否可行。
环境为ASP.NET MVC4。
扩展HtmlHelper方法,生成链接使判断一下。
我开始这么想过,但是考虑地方太多,这么写是不是太累了点。所以在想这个常见功能是否有一些简单的解决方案。
@徐牛: 这些东西,我都是放在数据库里的,render页面的时候,直接就不显示了。如果说你服务器端已经做了验证,那么,可以把权限的东西动态生成一个json串,然后,加载页面之后,用jquery去把没有权限的内容去了。
@sinhbv: 如果我想用Razor等视图引擎就只能用html扩展方法是吗?毕竟用jQuery等东西动态去除的话会闪烁一下。
@徐牛: 我觉得用httpmodule或者去扩展razor的话,对你这个需求来说的话,都太复杂了,还是存数据库里,然后,render的时候直接不显示比较好。至于httpmodule和razor的实现方法应该也是能实现的。
@sinhbv: 你说的Render不显示是这个思路吗?是不是我表述的方式不对。
<table> <tbody> <tr> <td>@html.IsAuthor(编辑,"edit","该链接需要的权限")</td> </tr> </tbody> </table>
就是整个页面惨杂这这种扩展方法。
@徐牛: 不论哪种实现,你都要告诉系统哪里需要权限判断,这个步骤少不了的,我想,这大概就是你觉得麻烦的地方。要做到控制越精细,肯定需要注册的地方越多。可以实现一个Url方法去生成链接和一个actionLink方法去生成描点。在方法里判断权限。
@sinhbv: 看来只能这样了。谢谢。
直接根据userId去数据库查有权限的Url。
我可以查到用户是否有权限,主要是在前端界面上如何显示或隐藏链接。
@徐牛:没权限,从数据库就判断了。无权访问的链接都不到客户端,何来隐藏之说。
后: var list=GetAuthorityUrlList(“userId”); 前: foreach(var m in list){ <li><a href="@m.url">@m.Name</a></li> }
不考虑前台隐藏,直接从后台不返回。
@幻天芒: 嗯,我说的前台是指生成的HTML代码,和你的思路一样,现在就是在Razor如何更便捷的判断是否生成链接页,毕竟并不像你所写那样就是把所有连接列出来,而是混杂在生成的所有代码中。比如导航条可能有一部分,table中可能有一部分。有没有更同一的方法不输出这部分,比如现在按1楼所说就是用扩展方法如:
<table> <tbody> <tr> <td>@html.IsAuthor(编辑,"edit","该链接需要的权限")</td> </tr> </tbody> </table>
就是整个页面惨杂这这种扩展方法。