在WebPart中进行一些权限判断的问题小结
在WebPart中,最主要就是访问SPWeb和SPList,用户可以分成匿名用户和登录用户。当权限不足时,我们可以采用模拟一个有权限的用户的身份来进行操作(通常是模拟管理员的)。在这个过程中,会存在一些问题,需要注意一下。下面是权限控制的分布图:
|
匿名Web |
非匿名、A无权Web |
非匿名、A有权Web |
匿名列表 |
非匿名、A无权列表 |
非匿名、A有权列表 |
匿名 |
可 |
提示密码框 |
提示密码框 |
可 |
否 |
否 |
匿名模拟B |
可 |
提示密码框 |
提示密码框 |
可 |
否 |
否 |
用户A |
可 |
提示密码框 |
可 |
可 |
否 |
可 |
A模拟B |
可 |
可 |
可 |
可 |
可 |
可 |
用户B |
可 |
可 |
可 |
可 |
可 |
可 |
l 其中“可”表示可访问。
l 其中“提示密码框”表示访问的时候会弹出输入用户名密码的输入框,不输入用户名、密码就不能访问页面。
l 其中“否”表示不能访问数据,但是在webpart中会提示“列表不存在或者列表无权限访问”。
从上表发现两个问题:
l 匿名用户无法模拟身份,在身份模拟后,web和列表仍然没有权限访问。经过和上海技术支持中心的确认,这是一个bug来的,并且是准备在下一版本中修复的Bug。所以要用匿名用户模拟管理员身份访问SPWeb的同志要注意了。
l 在不进行身份模拟的情况下很难通过用户自身判断自己是否对一个web具有访问权限。因为web的权限存放在SPWeb.Permissions中。但是要获得SPWeb.Permission,就必须首先获得SPWeb对象,而如果用户没有权限访问此Web,则在获得SPWeb对象的时候会提示用户输入用户名密码。这就形成了一个怪圈,即一个用户要获得是否有某个SPWeb的“访问权限”,就必须先获得这个SPWeb对象,而要获得这个SPWeb对象的前提又是必须这个用户对此SPWeb具有“访问权限”。这个至少从我的研究上看好像是没办法的,不知道各位高人是否有办法。
欢迎访问海洋工作室( http://www.oceanstudio.net )