다른 데이터베이스의 일부 데이터를 기반으로 여러 공지 사항을 작성하라는 고객 요청이 있습니다. 대부분은 쉽지만 새로운 요소는 입력 데이터에 지정된 사용자 (로그인)에 의해 작성되어야합니다. 목록 웹 서비스를 사용하여 공지 사항을 추가 할 계획 이었지만 사용자 생성 권한을 얻기 위해 가장을 사용하지 않는 것이 좋습니다. 가장을 사용하지 않고 올바른 사용자를 작성자로 지정하는 방법이 있습니까?특정 사용자의 공지 사항 목록에 요소 추가
답변
이 답변은 찾고자하는 답변이 아닐 수도 있지만 SharePoint 서버의 GAC에서 코드를 실행하는 경우 가장 (impersonation)이 매우 쉽습니다. 많은 사람들이 모르는 암호를 알 필요가 없으므로 이것이 내가 가장 (impersonation)을 원하지 않는 이유라고 추측합니다. 방법은 다음과 같습니다.
SPSite에 사용하는 일반적인 생성자를 사용하여 SharePoint에 연결하고 적절한 SPUser 개체를 찾을 수 있습니다. 일단 그렇게하면 해당 SPUser에 대한 UserToken 속성을 가져올 수 있습니다. 그런 다음 SPSite 생성자를 다시 사용해야하지만 SPUserToken을 제공하는 오버로드를 사용해야합니다. 그러면 SharePoint에서 수행하는 모든 작업은 가장을 통해 수행됩니다. 높은 권한으로 실행할 필요가 없습니다.
이제 단어로 말 했으므로 코드를 추측하려고 노력할 것입니다.
사용자가 사이트를 한 번 이상 방문하지 않은 경우, 대답의 코드 주석에 언급 된 바와 같이// Just determine the user token for a particular user
SPUserToken userToken = null;
using (SPSite tempSite = new SPSite("http://sharepointurl"))
{
using (SPWeb tempWeb = tempSite.OpenWeb())
{
// I think this next line works, but I'm going from memory
// I believe the user needs to have already logged into the site at least once
SPUser user = tempWeb.AllUsers["username"];
userToken = user.UserToken;
}
}
// Now do whatever we want impersonating that user
using (SPSite site = new SPSite("http://sharepointurl", userToken))
{
using (SPWeb web = site.OpenWeb())
{
// Do whatever you want here
}
}
저는 이것을 보관할 방법이 없다고 생각합니다.
그러나이 해결 방법이 도움이 될 수 있습니다. 나는 이것을 결코 시험하지 않았다는 것을 인정해야한다. 그것은 단지 당신이 당신의 문제를 어떻게 풀 수 있을지 생각할 뿐이다.
시도해 볼 수 있습니다. 관리자 또는 RunWithElevatedPrivileges()를 사용하여 새 공지 사항을 작성하십시오. 그런 다음 RunWithElevatedPrivileges() 메서드를 다시 사용하고 발표자의 실제 생성자가되어야하는 사용자에게 "만든 사람"필드를 설정합니다. 이 방법으로 "편집자"필드 만 "잘못된"사용자를 표시해야합니다.
나는 이것이 매우 우아한 해결책은 아니지만 효과가있을 수 있음을 알고 있습니다. 나는 추가 :)
난 그냥 내 요구 사항은 그래서 나는 확실히 내가 다른 솔루션을 함께했다
:-)이 할 수없는 희망 SharePoint의 감사 추적을 회피하기 위해 실제로 것을 깨달았 새 사용자 또는 그룹 필드를 공지 목록에 추가하고 AD 사용자 로그온을이 필드에 복사하십시오. 이전에 "만든 사람"필드를 사용한 모든 보고서 또는보기는 이제 새 필드를 사용해야합니다.실제 사용자가 녹음 메시지 목록에 새 요소를 입력하는 상황은 어떻습니까? 로그인 한 사용자가 새 필드를 업데이트하지 않습니다!
제가 생각해 볼 수있는 유일한 해결책은 ListItem Add 트리거를 목록에 추가하는 것입니다. 새 요소가 추가되면 새 필드에 값이 들어 있는지 확인한 다음 로그인 된 사용자의 ID로 새 필드를 업데이트합니다. 그런 식으로 새로운 필드는 항상 유효한 사용자 ID를 포함해야합니다.
나는 이것이 우아한 해결책이 아니라는 것을 알고 있지만 당분간은 내가 생각할 수있는 최선이다.
는 다음 적절한 경우 UserToken을 유도하는에서 사용 가능한 사용자 메타 데이터가 없습니다 : 그것은 무언가 같이해야합니다.그 흥미로운 보이는 지금
SPUser alice = web.EnsureUser(@"MYDOMAIN\alice");
SPList userInfo = web.SiteUserInfoList; //metadata storage of user info
SPListItem item = userInfo.GetItemById(alice.ID);
item["About Me"] = "I am Alice from Mel's Diner";
item.Update();
- 1. 목록에 요소 추가
- 2. MOSS에서 게시 이미지 필드를 공지 사항 목록에 추가 할 수 있습니까?
- 3. 워드 프레스 공지 사항 "정의되지 않은 인덱스"
- 4. 레일스 "공지 사항"플러그인에 대해 알고 있습니까?
- 5. 공지 사항 : 정의되지 않은 색인 : ZZZZZZWTF?
- 6. 공지 사항 모듈 : 표시된 숫자 제한
- 7. PHP - 공지 사항 : 정의되지 않은 변수
- 8. 은폐 할 수있는 공지 사항/팁이있는 사이트
- 9. 특정 장바구니 권장 사항
- 10. 간단한 "공지 사항"레일 응용 프로그램에 대한 데이터를 향상 시키십시오
- 11. R 목록에 요소 삽입
- 12. 목록에 요소 결합하기 - OCaml
- 13. 공지 사항 : 정의되지 않은 속성 : nusoapclient : $ 작업 /PATH/nusoap.php에서
- 14. 공지 사항을 자르기에서 자르십시오
- 15. 목록에 요소를 순서대로 추가 하시겠습니까?
- 16. 특정 사용자의 SHGetFolderPath()
- 17. 특정 사용자의 프로세스 나열
- 18. 특정 사용자의 프록시로 로그인
- 19. 목록에 정수로 추가
- 20. 목록에 이벤트 추가
- 21. 목록에 열거 형 추가
- 22. 연결된 목록에 추가
- 23. 2 개의 목록에 일치하는 요소
- 24. 사용자가 유효하지 않은 사용자의 목록에 들어가면?
- 25. php-ews를 사용하여 특정 사용자의 일정에 약속 추가
- 26. 런타임에 요소 추가
- 27. 특정 요소 앞뒤에있는 요소 찾기
- 28. 레일즈 3 공지
- 29. Sharepoint 2007 : 새 공지 사항에 대한 메시지 팝업
- 30. jQuery에서 요소 뒤에 추가
:
는 SharePoint 2010을 사용하면 SPWeb 클래스에서 사용할 수있는 EnsureUser 방법이있는 사용자 방문, (이 코드는 사용자를 생성하고 또한 자신의 프로필을 조금 꼬집는) 시뮬레이션 할 수 있습니다. 나는 그것을 시험해보고 되돌릴 것이다 – Kasper
커크, 나는 기절한다. 제안한 아이디어는 훌륭하지만 처음에는 감사 추적의 유효성이 무효화되어 주요 취약점으로 간주되었습니다. 두 번째 생각에서 나는이 "악용"을 사용하기 위해 적대적인 코드가 어쨌든 시스템의 핵심에 접근해야한다는 것을 깨달았습니다. – Kasper
그래, 나는이 허점이 거기에 있다는 것을 배웠을 때 너무 놀랐다. 말하듯이 코드에는 특정 코드 액세스 보안 수준이 있어야합니다 (물론 GAC가 해당 작업을 수행하므로). 또 하나 흥미로운 것은 SPListItem.SystemUpdate()입니다. –