Monday, March 2, 2009

Inconsistent Access Control in Liferay Social Office

Beberapa hari ini cukup dipusingkan dengan Access Control di Liferay Social Office. Untuk sebuah folder di bawah Document Library, apapun Permissions yang kita set, selalu saja semua user dapat melakukan 'Add Document' atau 'Add Folder'. Kecuali kalau 'view' permission tidak kita berikan ke user, maka user tersebut tidak dapat membuka folder tersebut, apalagi Add Document atau Add Folder. Saya belum cek kalau user mengetikkan URL add document langsung (tanpa view isi foldernya lebih dahulu) tetap bisa dilakukan Add Document atau tidak. Anyway, ternyata masalahnya ada di propagasi permission dari parent folder ke subfoldernya. Semua permission yang dimiliki current user pada sebuah folder akan dipropagasikan ke subfolder di bawahnya. Perilaku Aplikasi menjadi cacat karena Community Member memiliki permission Add Document dan Add Folder pada root folder di komunitas tersebut, sementara tidak ada UI untuk merubah permission pada root folder. Hanya Permission pada folder-folder lain yang dapat diubah, lewat menu 'Action:Permissions' yang tersedia saat kita menampilkan folder tersebut sebagai isi dari folder lain.
Solusi saat ini ialah menambahkan UI untuk mengubah permissions pada current folder yang sedang ditampilkan, sehingga pada saat menampilkan root folder, administrator dapat mengubah permissions pada root folder.
Perubahan pada webapps\ROOT\html\portlet\document_library\view.jsp atau view.portal.jsp :

(baris: 274)
boolean showCurDocumentSearch = showFileEntriesSearch && (results.size() > 0);
boolean showChangePermissions = DLFolderPermission.contains(permissionChecker, folder, ActionKeys.PERMISSIONS);
%>
Tambahkan di baris 301:
<c:if test="<%= showChangePermissions %>">
<liferay-security:permissionsURL
modelResource="<%= DLFolder.class.getName() %>"
modelResourceDescription="<%= folder.getName() %>"
resourcePrimKey="<%= String.valueOf(folder.getFolderId()) %>"
var="changePermissionsURL"
/>
<liferay-ui:icon image="permissions" url="<%= changePermissionsURL %>" />
</c:if>

Nah, selanjutnya, kami mengalami anomali di portlet permissions. Di Forum Liferay ada beberapa posting yang membahas kasus ketika seseorang pernah diberi akses untuk menambahkan sebuah portlet ke sebuah halaman, kemudian akses tersebut dihilangkan ketika user tersebut telah menambahkan portlet tersebut. Pada banyak kasus, user tetap dapat melihat isi dari portlet yang sudah ditambahkan meskipun hak aksesnya sudah tidak dimiliki. Ia hanya dicegah dari menambahkan portlet, dan tidak dicegah dari melihat isi portlet yang mana ia tidak lagi memiliki akses. Pada kasus kami, manifestasinya ialah kadang-kadang halaman depan user menunjukkan status denied, dan setelah beberapa kali dicoba (dengan navigasi berputar-putar ke tempat lain dahulu) portlet-portlet di halaman depan user tetap ditampilkan di halaman default.

No comments: