2009-12-15 6 views
0

내 문제를 해결할 수 있기를 바랍니다.Moss에서 현재 사용자 그룹을 얻는 방법?

이벤트 처리기를 사용하여 공유 목록 및 문서 라이브러리에 항목 레벨 pemrissions를 설정하려고 시도했으나이를 수행 할 수 없습니다.이 코드가 도움이되었습니다. 로그인 사용자를 기준으로 항목에 대한 사용 권한을 할당해야합니다. . 그가 속한 그룹. 현재 사용자 그룹을 검색 할 수 없습니다. 이것은 내 코드입니다.

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    using (SPSite _site = new SPSite(properties.WebUrl)) 
    { 
    using (SPWeb spWeb = _site.OpenWeb(properties.RelativeWebUrl)) 
    { 
     SPUser currentUser = spWeb.CurrentUser; 
     SPListItem listItem = properties.ListItem; 

     listItem.BreakRoleInheritance(true); 
     SPGroupCollection spgroup = currentUser.Groups; 

     foreach (SPGroup group in spgroup) 
     { 
     SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group); 
     SPRoleDefinition roleDefinition = spWeb.RoleDefinitions.GetByType(SPRoleType.Contributor); 

     roleAssignment.RoleDefinitionBindings.Add(roleDefinition); 

     listItem.RoleAssignments.Add(roleAssignment); 

     spWeb.AllowUnsafeUpdates = true; 

     listItem.Update(); 

     spWeb.AllowUnsafeUpdates = false; 
     } 
    } 
    } 
} 

답변

0

이 시도 :

public override void ItemAdded(SPItemEventProperties properties) 
{ 
    // run the code impersonating the web application account, this works better than the regular RunWithElevatedPrivileges 
    using (var site = new SPSite(properties.SiteId, properties.ListItem.ParentList.ParentWeb.Site.SystemAccount.UserToken)) 
    { 
    using (var web = site.OpenWeb(properties.RelativeWebUrl)) 
    { 
     web.AllowUnsafeUpdates = true; 
     var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId); 

     item.BreakRoleInheritance(false); 

     foreach (SPGroup group in web.CurrentUser.Groups) 
     { 
     var assignment = item.Web.RoleAssignments.GetAssignmentByPrincipal(group); 
     var roleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Contributor); 

     assignment.RoleDefinitionBindings.Add(roleDefinition); 
     item.RoleAssignments.Add(assignment); 
     } 

     DisableEventFiring(); 
     item.SystemUpdate(false); 
     EnableEventFiring(); 
     web.AllowUnsafeUpdates = false; 
    } 
    } 
} 
관련 문제