Я пишу компонент Java, который создает все страницы в вики. Как лучше всего назначить права или группы пользователей, которые могут просматривать страницу или пробелы из компонента службы Java? Очень сложно найти подробности об этом в API.
Установите права пользователя и группы на документ в XWiki
Ответы (1)
Вы не найдете подробностей в API, потому что API прав предназначен только для чтения информации о правах, а не для установки прав.
Если вы хотите установить разрешения на страницах программно и можете предположить, что установлен обработчик разрешений по умолчанию (что делает и пользовательский интерфейс, и код для создания новых пользователей в XWiki, так что это кажется не слишком необоснованным), вы можете создать их. как объекты на страницах.
- Разрешения устанавливаются добавлением на страницы объектов типа «XWiki.XWikiRights»
эти объекты имеют следующие атрибуты:
groups
: a string containing a comma separated list of group references (e.g.XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup
for the default admin and "all members" group)users
: строка, содержащая список ссылок на пользователей, разделенных запятыми (например,xwiki:XWiki.Admin,XWiki.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», чтобы увидеть все нужные объекты в вашей вики.
MyCompany.HRGroup
, MyCompany.AdminGroup
, MCompany.EngineersGroup
, с разными правами, а затем добавлять в них пользователей в зависимости от их роли?
- person Nawaz; 20.03.2020
XWiki
, вы можете создать пустую страницу для каждой из них, а затем в редакторе объектов добавить к ней объект типа XWiki.XWikiGroups
. Не забудьте установить флажок для страницы терминала при ее создании. Если вы хотите сделать это программно, а не через пользовательский интерфейс, ответ будет заключаться в том, чтобы ждать комментария; задайте новый вопрос.
- person Clemens Klein-Robbenhaar; 22.03.2020
XWiki
- это пробел. Думаю, я смогу это использовать. Я тоже в порядке с XWiki.HRGroup
. Да, я хочу сделать это программно. Я задам новый вопрос.
- person Nawaz; 22.03.2020
rightClassReference.removeParent(rightClassReference.getWikiReference());
. Чтобы избежать неявных прав, унаследованных от родителей (как описано в здесь ваши примеры)?
- person Nawaz; 30.03.2020
xwiki:XWiki.XWikiGlobalRights
), но для поиска класса необходимо иметь ссылку без префикса вики (например, XWiki.XWikiGlobalRights
). Это то, что делает код. Лично я предпочитаю использовать в этих случаях просто строки вместо ссылок, даже если соответствующие методы устарели, так как я еще не закончил свою докторскую диссертацию по ссылкам XWiki.
- person Clemens Klein-Robbenhaar; 31.03.2020