2015-12-03 2 views
1

Я пишу компонент java, который создает все страницы в вики. Каким будет лучший способ назначить права пользователя или группы, которые могут просматривать страницу или пробелы из компонента Java-сервиса? Действительно изо всех сил пытается найти информацию об этом в API.Установить права пользователя и группы для документа в XWiki

ответ

2

Вы не находите никаких подробностей в API, так как API права только о чтении информации о правах, не устанавливая права

Если вы хотите установить разрешения на страницах программны, и можно предположить, что обработчик разрешения по умолчанию (что и UI, и код для создания новых пользователей в XWiki делает, поэтому кажется, что это не слишком unreasonbale), вы можете создавать их как объекты на страницах.

  1. Права доступа устанавливаются путем добавления объектов «XWiki.XWikiRights» типа на страницах
  2. эти объекты имеют следующие атрибуты:

    • groups: строка, содержащая запятую список группы ссылки (например, XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup для группы администратора по умолчанию и группы «все участники»)
    • users: строка, содержащая список ссылок пользователей, разделенных запятыми (например, xwiki:XWiki.Admin,XWiki.Admin). напишите главный администратор wiki и учетную запись «Admin» в локальной вики
    • levels: строка, содержащая список разрешений, разделенных запятыми, которые пострадали от этой записи, например. view,comment,edit
    • allow: целое число, которое должно иметь два значения: 1 означает, что запись является «разрешить это право», 0 означает, что это «отрицают эти права»

В groups и users поле может быть пустым, хотя обычно один из них заполняется данными. levels и allow должны быть установлены с некоторыми значениями.

Одним из примеров того, как установлено разрешение на странице является (внутренний) метод XWiki.protectUserPage, который устанавливает права на вновь создать пользователя в том, что этот пользователь может редактировать те, одну страницу профиля:

public void protectUserPage(String userName, String userRights, XWikiDocument doc, XWikiContext context) 
    throws XWikiException 
{ 
    DocumentReference rightClassReference = getRightsClass(context).getDocumentReference(); 

    EntityReference relativeRightClassReference = 
     rightClassReference.removeParent(rightClassReference.getWikiReference()); 

    // Allow users to edit their own profiles 
    BaseObject newuserrightsobject = doc.newXObject(relativeRightClassReference, context); 
    newuserrightsobject.setLargeStringValue("users", userName); 
    newuserrightsobject.setStringValue("levels", userRights); 
    newuserrightsobject.setIntValue("allow", 1); 
} 

Здесь первые несколько строк немного сложнее, чтобы убедиться, что страница класса XWiki.XWikiRights присутствует и правильно инициализирована; без вреда вы должны быть в состоянии сделать что-нибудь попроще, как:

BaseObject newrightsobject = doc.newObject("XWiki.XWikiRights", context); 

userRights обычно edit здесь (это было только то, что, глядя на код, который я узнал, что это на самом деле настраивается ...); userName - полное имя страницы профиля пользователя здесь (например, XWiki.NewUser)

Фактический полный код можно просмотреть в github, например. для 7.2 выпуска:

https://github.com/xwiki/xwiki-platform/blob/xwiki-platform-7.2/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java#L3366

Наконец различать права только данных на конкретную страницу, и прав, предоставляемых на страницу и все ее подстраниц: если вы хотите объекта прав, справедливо для подстраниц, тоже делать не добавляйте его к самой странице, но создайте специальную подстраницу с именем WebPreferences и добавьте к этой странице объект типа XWiki.XWikiGlobalRights (с теми же полями).

Некоторые дополнительные указатели:

для получения более подробной информации, как работают права доступа, см http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Access+Rights особенно справочный раздел: «Обзор разрешений»

Если вы установили расширение «Admin Tools», вам можно просмотреть страницу «ShowRights», чтобы увидеть все нужные объекты в вашей вики.

+0

Спасибо за отличный ответ! –