一.关于表单库和表单之间的“权限继承”:(在做精确到表单级的权限时)
- 要点:应使当前用户保持始终对所有待修改对象有足够的权限,这样代码就不会出现太大的问题。
- 在使用“BreakRoleInheritance(bool)和ResetRoleInheritance()”时应确保CurrWeb的“AllowUnsafeUpdates==true”,BreakRoleInheritance之后应再次用“AllowUnsafeUpdates=true”使AllowUnsafeUpdates为true,以便以后向‘权限集’内增加权限之用。
- BreakRoleInheritance(false)最好不要在开启浏览器功能的表单内的SPList对象上使用,因为当它在Infopath中打开时没问题,而在浏览器中打开时会出现异常(原因:假设某‘SPList’下有某‘SPListItem’它的HasUniqueRoleAssignments==true,那么此时如果用SPList.BreakRoleInheritance(false)来清空除当前用户外的其他用户时操作将失败,因为一些用户对该‘SPListItem’有权限,清除‘父层(SPList)’上的权限意味着他们将‘自动’失去这些权限,但为何在‘InfoPath’和‘浏览器’中有不同的‘表现’... ? ... ?)。
- 在List中使用“BreakRoleInheritance(bool)”时注意,假设当前List中有3个项,其中一个项有HasUniqueRoleAssignments==true,那么此时如果用“BreakRoleInheritance(false)”将会把该项内的所有已有权限清掉。
- tmpRoleAssi = currList.RoleAssignments.GetAssignmentByPrincipal(currUserOrGroup);
tmpRoleAssi.RoleDefinitionBindings.RemoveAll();
tmpRoleAssi.Update(); //这句会使对‘tmpRoleAssi’的更改'刷回'currList.RoleAssignments集合内。