Ostatnio spotkałem się z następującym problemem:

Użytkownicy portalu powinni móc przeglądać dane dot. innego użytkownika, jednakże te dane muszą być ograniczone do Imienia, Nazwiska i działu. Nic innego nie może zostać pokazane jak i także listy użytkowników na których znajdują się wszyscy użytkownicy przypisani do portalu powinny być puste dla użytkownika przeglądającego.

Cały problem polegał w założeniu iż użytkownicy powinni móc przeglądać dane dot. innego użytkownika. Gdyby nie to ograniczenie, wystarczyło by odznaczyć uprawnienie Browse Users Information w uprawnieniach dla danej grupy użytkowników. Jednakże zmiana ta powoduje to, że dani użytkownicy nawet nie będą mogli przejść na stronę z informacją na temat użytkownika. Dodatkowo, jeżeli wplączecie się w problem z zbyt dużą ilością Security Principal to odhaczenie opcji Browse Users Information krzyknie time outem.

W moim przypadku jednak to rozwiązanie nie zadowalało klienta. Zostałem poproszony o spełnienie dokładnie ich wymagań. W tym celu musiałem zrobić dwie rzeczy:

  1. Przeciążyć iteratora pól wyświetlanych, który jest odpowiedzialny za wyświetlanie pól z list na domyślnych stronach Display.aspx. Klasa, którą należało przeciążyć nazywa się ListFieldIterator, ale opis tego jak to zrobić pozostawię na inny wpis.
  2. Przeciążyć ukrywanie listy użytkowników.

Tak jak już zaznaczyłem pierwszy krok przerzucę na drugą cześć wpisu jako, że temat ten jest bardziej rozbudowany, z za pomocą własnego ListFieldIterator można robić cuda nie musząc przeciążać stron po to by coś ukryć.

Krok drugi jest bardzo prosty i może zostać zastosowany nie tylko do ukrywania list użytkowników, ale także do ukrywania typowych przycisków SharePointa jak np.: menu Actions czy sam przycisk z menu Actions jak Alert Me. Jednak tutaj skoncentruje się na zablokowaniu wyświetlania listy użytkowników (gdybyście byli ciekawi jak to zrobić dla innych elementów, dajcie znać a odpiszę w komentarzach lub stworze nowy post).

Przejdzie do katalogu 12 HIVE i przeszukajcie go w poszukiwaniu plików:

  1. People.aspx – służy do wyświetlania podstawowych informacji na temat użytkowników portalu. Kliknięcie na wartość kolumny Name przenosi do szczegółowych informacji na temat użytkownika.
  2. Groups.aspx – służy do wyświetlania listy grup stworzonych na portalu. Kliknięcie na wartość kolumny Group przenosi do strony people.aspx z określonym parametrem MemberShipGrupId, który powoduje, że tylko ludzie z danej grupy są wyświetlani.

Każdy z plików należy skopiować i zmienić jego nazwę na naprzykłąd people.aspx.old i tak samo dla groups.aspx.

Teraz otwieramy w notatniku people.aspx i szukamy następującego tagu:

<SharePoint:ListView id="UserListView" ListID="UserInfo" runat="server"/>

Ten tag następnie umieszczamy w następującym tagu:

<Sharepoint:SPSecurityTrimmedControl runat="server" PermissionsString="ManageWeb">
	<SharePoint:ListView id="UserListView" ListID="UserInfo" runat="server"/>
</Sharepoint:SPSecurityTrimmedControl>

SPSecurityTrimmedControl, powoduje, że tagi zawarte w nim wykonają się wtedy i tylko wtedy, gdy zostanie spełniony atrybut PermissionsString.

Atrybut ten może przyjąć następujące wartości:

  • Grupa List Permissions
    • ManageLists
    • CancelCheckout
    • AddListItems
    • EditListItems
    • DeleteListItems
    • ViewListItems
    • ApproveItems
    • OpenItems
    • ViewVersions
    • DeleteVersions
    • CreateAlerts
    • ViewFormPages
  • Grupa Site Permissions
    • ManagePermissions
    • ViewUsageData
    • ManageSubwebs
    • ManageWeb
    • AddAndCustomizePages
    • ApplyThemeAndBorder
    • ApplyStyleSheets
    • CreateGroups
    • BrowseDirectories
    • CreateSSCSite
    • ViewPages
    • EnumeratePermissions
    • BrowseUserInfo
    • ManageAlerts
    • UseRemoteAPIs
    • UseClientIntegration
    • Open
    • EditMyUserInfo
  • Grupa Personal Permissions
    • ManagePersonalViews
    • AddDelPrivateWebParts
    • UpdatePersonalWebParts

Opis znaczenia poszczególnych wartości możecie znaleźć na waszej lokalnej stronie SharePoint ~/_layouts/editrole.aspx?role=Full%20Control .

Ja wprowadziłem wartość ManageWeb, jako, że tylko administratorzy portalu u mnie mieli prawo przeglądania tych informacji.

Po zmodyfikowaniu pliku zapisujemy go i operację powtarzamy dla pliku groups.aspx.

To wszystko! :) teraz lista użytkowników nie będzie wyświetlona nikomu oprócz administratorom.

Następnym razem opiszę ListFieldIterator.