Я пишу компонент java, который создает все страницы в вики. Каким будет лучший способ назначить права пользователя или группы, которые могут просматривать страницу или пробелы из компонента Java-сервиса? Действительно изо всех сил пытается найти информацию об этом в API.Установить права пользователя и группы для документа в XWiki
ответ
Вы не находите никаких подробностей в API, так как API права только о чтении информации о правах, не устанавливая права
Если вы хотите установить разрешения на страницах программны, и можно предположить, что обработчик разрешения по умолчанию (что и UI, и код для создания новых пользователей в XWiki делает, поэтому кажется, что это не слишком unreasonbale), вы можете создавать их как объекты на страницах.
- Права доступа устанавливаются путем добавления объектов «XWiki.XWikiRights» типа на страницах
эти объекты имеют следующие атрибуты:
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 выпуска:
Наконец различать права только данных на конкретную страницу, и прав, предоставляемых на страницу и все ее подстраниц: если вы хотите объекта прав, справедливо для подстраниц, тоже делать не добавляйте его к самой странице, но создайте специальную подстраницу с именем WebPreferences
и добавьте к этой странице объект типа XWiki.XWikiGlobalRights
(с теми же полями).
Некоторые дополнительные указатели:
для получения более подробной информации, как работают права доступа, см http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Access+Rights особенно справочный раздел: «Обзор разрешений»
Если вы установили расширение «Admin Tools», вам можно просмотреть страницу «ShowRights», чтобы увидеть все нужные объекты в вашей вики.
Спасибо за отличный ответ! –