在2007里面
每一个能分配权限的东西(SPWeb、SPList、SPListItem等)都会有一个RoleAssignments属性,它是一个SPRoleAssignmentCollection类型的属性,用于分配权限
此外,在SPWeb里还有RoleDefinitions属性(只在SPWeb里有,也就是说角色只能定义在网站里)
举个例子,
比如我们要给一个用户(user)分配一个在列表(list)上的权限,权限使用了一个名叫“xxx”的角色
代码如下:
SPRoleAssignment ra = new SPRoleAssignment(user);SPRoleDefinition rd = web.RoleDefinitions["xxx"];ra.RoldDefinitionBindings.Add(rd);list.RoleAssignments.Add(ra);
又比如,修改一个用户的权限:
SPRoleAssignment ra = list.RoleAssignments.GetAssignmentByPrincipal(user);SPRoleDefinition rd = web.RoleDefinitions["xxx"];ra.RoldDefinitionBindings.Add(rd);ra.Update();
但是,如果这个列表的权限之前是继承自网站的,
那么上面的代码并不会自动的修改这种继承,反而会抛出异常
我们必须手工解除这种继承关系:
list.BreakRoleInheritance(true);
参数中true的意思是把继承下来的权限重新copy过来(如果你不改它的话,它和网站的权限还是一样的),如果是false,则使用列表模版中定义的默认权限(这个我没试过)
如果要新建一个角色的话,直接new一个SPRoleDefinition,改改它的Name、Description、BasePermissions属性,然后再加到web.RoleDefinitions里就可以了;或者在new的时候可以选择一个现有的角色copy过来,再改一改。这个代码我就不写了