首页 新闻 搜索 专区 学院

如何实现根据用户权限显示导航

0
悬赏园豆:10 [已解决问题] 解决于 2013-09-24 16:54

现在做一个管理系统其中权限分类很多,有些没有权限的用户将看不到部分链接,服务器端已经做了验证,请问客户端如何实现不显示没有权限的连接。

个人想到的一个方案是每一个url上加一个标记,然后用Html Agility Pack,在输出到客户端之前做一些操作,但是现在还未尝试是否可行。

环境为ASP.NET MVC4。

徐牛的主页 徐牛 | 菜鸟二级 | 园豆:282
提问于:2013-09-24 11:35
< >
分享
最佳答案
1

扩展HtmlHelper方法,生成链接使判断一下。

收获园豆:5
sinhbv | 老鸟四级 |园豆:2579 | 2013-09-24 13:05

我开始这么想过,但是考虑地方太多,这么写是不是太累了点。所以在想这个常见功能是否有一些简单的解决方案。

徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 13:17

@徐牛: 这些东西,我都是放在数据库里的,render页面的时候,直接就不显示了。如果说你服务器端已经做了验证,那么,可以把权限的东西动态生成一个json串,然后,加载页面之后,用jquery去把没有权限的内容去了。

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-24 13:22

@sinhbv: 如果我想用Razor等视图引擎就只能用html扩展方法是吗?毕竟用jQuery等东西动态去除的话会闪烁一下。

徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 13:45

@徐牛: 我觉得用httpmodule或者去扩展razor的话,对你这个需求来说的话,都太复杂了,还是存数据库里,然后,render的时候直接不显示比较好。至于httpmodule和razor的实现方法应该也是能实现的。

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-24 13:50

@sinhbv: 你说的Render不显示是这个思路吗?是不是我表述的方式不对。

<table> <tbody> <tr> <td>@html.IsAuthor(编辑,"edit","该链接需要的权限")</td> </tr> </tbody> </table>

 

就是整个页面惨杂这这种扩展方法。

徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 13:56

@徐牛: 不论哪种实现,你都要告诉系统哪里需要权限判断,这个步骤少不了的,我想,这大概就是你觉得麻烦的地方。要做到控制越精细,肯定需要注册的地方越多。可以实现一个Url方法去生成链接和一个actionLink方法去生成描点。在方法里判断权限。

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-24 16:43

@sinhbv: 看来只能这样了。谢谢。

徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 16:54
其他回答(1)
0

直接根据userId去数据库查有权限的Url。

收获园豆:5
幻天芒 | 园豆:36781 (高人七级) | 2013-09-24 13:18

 我可以查到用户是否有权限,主要是在前端界面上如何显示或隐藏链接。

支持(0) 反对(0) 徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 13:20

@徐牛:没权限,从数据库就判断了。无权访问的链接都不到客户端,何来隐藏之说。 

后:

var list=GetAuthorityUrlList(“userId”);

前:

foreach(var m in list){

<li><a href="@m.url">@m.Name</a></li>

}

不考虑前台隐藏,直接从后台不返回。

支持(0) 反对(0) 幻天芒 | 园豆:36781 (高人七级) | 2013-09-24 13:25

@幻天芒: 嗯,我说的前台是指生成的HTML代码,和你的思路一样,现在就是在Razor如何更便捷的判断是否生成链接页,毕竟并不像你所写那样就是把所有连接列出来,而是混杂在生成的所有代码中。比如导航条可能有一部分,table中可能有一部分。有没有更同一的方法不输出这部分,比如现在按1楼所说就是用扩展方法如:

<table>
<tbody>
<tr>
<td>@html.IsAuthor(编辑,"edit","该链接需要的权限")</td>
</tr>
</tbody>
</table>

就是整个页面惨杂这这种扩展方法。

支持(0) 反对(0) 徐牛 | 园豆:282 (菜鸟二级) | 2013-09-24 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册