none
用对象模型编程存在权限问题 RRS feed

  • 问题

  • 我要做的是当用户添加项目后对该项目分配权限,我用对象模型来做。

    代码如下:

    //删除当前项目所有权限

     SPRoleAssignmentCollection collRoleAssignment = item.RoleAssignments;

    item.BreakRoleInheritance(true);

    foreach (SPRoleAssignment roleAssignment in collRoleAssignment) {

    item.RoleAssignments.Remove(roleAssignment.Member); }

    //为当前项目分配权限

    SPRoleAssignment ra = new SPRoleAssignment(oWeb.CurrentUser);

    SPRoleDefinition rd = oWeb.RoleDefinitions["参与讨论"];

     ra.RoleDefinitionBindings.Add(rd); item.RoleAssignments.Add(ra);

    部署后用普通用户登陆添加项目后有错误,调试发现程序运行到item.BreakRoleInheritance(true)时因权限不足而抛出错误。请问如何解决这个问题。

    谢谢。

    2011年5月6日 8:37

答案

全部回复

  • 可以使用 SPSecurity.RunWithElevatedPrivileges提升你的权限,使用方法请参考:

    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx

     

    如果还不行,需要检查你的程序的权限(在任务管理器查看你的exe是哪个用户运行的),必须保证你的程序的运行用户是本地管理员,同时最低是网站集管理员。


    2011年5月6日 9:09
  • 谢谢你的回复。 问题已解决。用SPSecurity.RunWithElevatedPrivileges方法提升权限即可。
    2011年5月9日 3:46
  • 你的程度是在网页里面运行的吗?

    如果是,你必须让你的代码提升到SP的网站管理员权限才可以执行。

    SPSite siteColl = SPContext.Current.Site;
     
    SPWeb site = SPContext.Current.Web;
     
    SPUser user = site.Users[@“username@moss.com ”]; // 你的SP的网站管理员
     
    SPUserToken userToken = user.UserToken;
     
    SPSecurity.RunWithElevatedPrivileges(delegate() {
     
    using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID, userToken))//使用你的SP的网站管理员的token重新获取SPSite对象
    {
     
    using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

    {        //以litware"ken身份运行
          string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

        }
     
    }
     
    });


    关于SharePoint里面提升权限的方法,请参考

    http://blog.csdn.net/yefengmeander/archive/2010/09/30/5916680.aspx

    2011年5月9日 9:33