Tabla de Contenidos

IfAuthEx Plugin

Compatible con DokuWiki

  • 2024-02-06 "Kaos" si
  • 2023-04-04 "Jack Jackrum" desconocido
  • 2022-07-31 "Igor" si
  • 2020-07-29 "Hogfather" si

plugin Toggle DokuWiki page content based on users and groups with arbitrary boolean expressions

actualizado por última vez en
2023-02-08
Proporciona
Syntax
Repositorio
Fuente

Similar a condition, ifauth, isauth, nodisp, showif

Etiquetado con acl, groups, hide, if, users

Installation

Please use the extension manager to install the plugin, no configuration needed.

For manual install, use the URL above and refer to Plugins.

Examples/Usage

This plugin selectively renders portion of the wiki page for certain users or groups (or combination of these conditions). The content is not truly hidden, it is just not rendered (it is still visibile on the source). To truly hide use the nodisp plugin.

<ifauth @user>
  Visible only to logged in users
  <ifauth !testuser>
    Visible to all logged in users except ''testuser''
  </ifauth>
</ifauth>
<ifauth @admin>
  Visible only to admins
</ifauth>
<ifauth testuser>
  Visible only to the user ''testuser''
</ifauth>
<ifauth @user && !@admin>
  Visible only to logged in users who are not admins
</ifauth>
<ifauth !eviluser>
  Hidden to ''eviluser''
</ifauth>
<ifauth @経営企画本部 && !@企画部>
  Visible to the corporate planning division but not the planning department.
  This requires the ''mbstring'' extension to be loaded.
</ifauth>
<ifauth !@user>
  Hidden to logged in users
</ifauth>
<ifauth !@user || testuser>
  Visible only to ''testuser'' or when you are not logged in
</ifauth>
<ifauth @staff && @admin>
  Visible only to members of the staff who are admin too
</ifauth>

In the examples above

Syntax

Basic syntax:

<ifauth EXPR>Content to selectively display</ifauth>

The content will be rendered only if the access condition described by EXPR is satisfied. EXPR is built using the standard PHP logical operators NOT !, AND &&, OR || and the parentheses (SUBEXPR). The access conditions are described using the following literals:

You can form arbitrary expressions such as the ones in the examples above, or more sophisticated such as (usr1 || @grp1 || usr2) && (@grp2 || !@grp3 && @grp4).

In user names and group names, you can use letters, numbers, dots ., dashes -, and underscores _. In fact, you can use anything matched by the regular expression [\w.-]+, including UTF-8 multibyte characters (although that requires the mbstring extension to be active).

If you need to use any other character, you must wrap the user name in double quotes, e.g. "user name with space", see below.

Quoting names

If you have user or group names which contains characters other than those mentioned above ([\w.-]+), you can still specify them, but you have to quote them. The rules are as follows:

Quotes go around the user name and group name; logical operators (e.g. !) and the in-group operator @ remain outside, as in @"DOMAIN\\Admins" && !"DOMAIN\\EvilAdmin".

Remarks and limitations

Compatibility with the ifauth plugin

This plugin intends to replace the ifauth Plugin, but it's an independent reboot. By design, it features exactly the same syntax, plus the extra logical operators, borrowed from PHP. You can just deactivate ifauth, and activate ifauthex.

The case for writing a different plugin is because ifauth can only “or” the conditions that are specified. We had the need of specifying precisely the condition @members && !@admin, and this simple expression already cannot be specified in ifauth. So we generalized the syntax to arbitrary Boolean expression (in for a penny…).

Development

(Consider a request for an 'else' option to go with the 'if' please?)

Goes without saying, this plugin does not use eval.

The plugin contains internally a relatively simple tokenizer and lexer/parser, which generates an abstract syntax tree and can evaluate it depending on the operations defined. It is not super efficient or the most flexible, but it does the job and it's reconfigurable. It is implemented in ifauthex/lib/, in the files tokenizer.php, parser.php, exceptions.php.

The grammar for this specific application is independently defined in ifauthex/lib/grammar.php, so tokenizer, lexer and parsers could be reused for other plugins.

Change Log

Release list