Share via


模拟WSS Site中的Guest组

在WSS站点中,如果我们手动往一个List,例如一个文档库中添加一个用户,如果原来这个用户不在这个WSS站点的用户列表中,那么这个新的用户会被自动添加到Guest这个组中。

但如果我们使用代码来实现,事情就没有这么简单了:使用代码来往一个List中添加用户的时候,这个用户必须是一个Site Group中的用户,而如果这是一个新的用户,那么WSS站点不会自动把这个用户添加到Guest组中。但Guest组是不能够改动的,使用代码是不能把一个用户添加进去的。所以这里出现了一个死循环……

一个解决方法就是:新建一个组,来模拟Guest组,然后把这个用户先加到这个组中。为了实现新建的组和Guest组一样,没有任何权限,还需要删除这个组的权限:

          SPWeb myweb = new SPSite("https://server").OpenWeb("sites/sitename");

          myweb.AllowUnsafeUpdates = true;

          SPRoleCollection siteGroups = myweb.Roles;

          siteGroups.Add("test", "This is the group used for guest", SPRights.ViewPages);

          SPRole test = myweb.Roles["test"];

          test.PermissionMask = test.PermissionMask ^ SPRights.ViewPages;

          test.AddUser("domain/user", "user@test.com", "User", "test");

          SPMember myuser = test.Users.GetByEmail("user@test.com ");

          SPList mylist = myweb.Lists["Shared Documents"];

          mylist.Permissions.Add(myuser, SPRights.ViewListItems);

对于Portal,则不会有这个问题,因为Portal上根本没有Guest组。