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:
- 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.
- 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:
- 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.
- 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.