CINXE.COM
plugin:ifauthex [DokuWiki]
<!DOCTYPE html> <html lang="en" dir="ltr" class="no-js"> <head> <meta charset="utf-8" /> <title>plugin:ifauthex [DokuWiki]</title> <meta name="generator" content="DokuWiki"/> <meta name="theme-color" content="#008800"/> <meta name="robots" content="index,follow"/> <meta name="keywords" content="plugin,ifauthex"/> <link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="DokuWiki"/> <link rel="start" href="/"/> <link rel="contents" href="/plugin:ifauthex?do=index" title="Sitemap"/> <link rel="manifest" href="/lib/exe/manifest.php"/> <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/feed.php"/> <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&ns=plugin"/> <link rel="edit" title="Edit this page" href="/plugin:ifauthex?do=edit"/> <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/plugin:ifauthex"/> <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/plugin:ifauthex"/> <link rel="canonical" href="https://www.dokuwiki.org/plugin:ifauthex"/> <link rel="stylesheet" href="/lib/exe/css.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e"/> <script >var NS='plugin';var JSINFO = {"plugins":{"edittable":{"default columnwidth":""}},"id":"plugin:ifauthex","namespace":"plugin","ACT":"show","useHeadingNavigation":0,"useHeadingContent":0};(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" defer="defer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" defer="defer"></script> <script src="/lib/exe/js.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e&lang=en" defer="defer"></script> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="shortcut icon" href="/lib/tpl/dokuwiki/images/favicon.ico" /> <link rel="apple-touch-icon" href="/lib/tpl/dokuwiki/images/apple-touch-icon.png" /> <meta name="verify-v1" content="OVxl3gsCv2MhZqh1cBQyl0JytWXSwXMjyvwc+4w3WtA=" /> <meta name="google-site-verification" content="YhTVK69hW94ZXUtc2zSLPxTkZKbZIn0zK67mz5WQB-E" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-83791-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-83791-1', { 'anonymize_ip': true }); </script> </head> <body> <div id="dokuwiki__site"><div id="dokuwiki__top" class="site dokuwiki mode_show tpl_dokuwiki showSidebar hasSidebar"> <!-- ********** HEADER ********** --> <header id="dokuwiki__header"><div class="pad group"> <div class="headings group"> <ul class="a11y skip"> <li><a href="#dokuwiki__content">skip to content</a></li> </ul> <h1 class="logo"><a href="/start" accesskey="h" title="Home [h]"><img src="/lib/tpl/dokuwiki/images/logo.png" width="64" height="64" alt="" /><span>DokuWiki</span></a></h1> <p class="claim">It's better when it's simple</p> </div> <div class="tools group"> <!-- USER TOOLS --> <div id="dokuwiki__usertools"> <h3 class="a11y">User Tools</h3> <ul> <li class="action login"><a href="/plugin:ifauthex?do=login&sectok=" title="Log In" rel="nofollow"><span>Log In</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg></a></li> </ul> </div> <!-- SITE TOOLS --> <div id="dokuwiki__sitetools"> <h3 class="a11y">Site Tools</h3> <form action="/start" method="get" role="search" class="search doku_form" id="dw__search" accept-charset="utf-8"><input type="hidden" name="do" value="search" /><input type="hidden" name="id" value="plugin:ifauthex" /><div class="no"><input name="q" type="text" class="edit" title="[F]" accesskey="f" placeholder="Search" autocomplete="on" id="qsearch__in" value="" /><button value="1" type="submit" title="Search">Search</button><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form> <div class="mobileTools"> <form action="/doku.php" method="get" accept-charset="utf-8"><div class="no"><input type="hidden" name="id" value="plugin:ifauthex" /><select name="do" class="edit quickselect" title="Tools"><option value="">Tools</option><optgroup label="Page Tools"><option value="edit">Edit this page</option><option value="revisions">Old revisions</option><option value="backlink">Backlinks</option></optgroup><optgroup label="Site Tools"><option value="recent">Recent Changes</option><option value="media">Media Manager</option><option value="index">Sitemap</option></optgroup><optgroup label="User Tools"><option value="login">Log In</option></optgroup></select><button type="submit">></button></div></form> </div> <ul> <li class="action recent"><a href="/plugin:ifauthex?do=recent" title="Recent Changes [r]" rel="nofollow" accesskey="r">Recent Changes</a></li><li class="action media"><a href="/plugin:ifauthex?do=media&ns=plugin" title="Media Manager" rel="nofollow">Media Manager</a></li><li class="action index"><a href="/plugin:ifauthex?do=index" title="Sitemap [x]" rel="nofollow" accesskey="x">Sitemap</a></li> </ul> </div> </div> <!-- BREADCRUMBS --> <div class="breadcrumbs"> <div class="trace"><span class="bchead">Trace:</span> <span class="bcsep">•</span> <span class="curid"><bdi><a href="/plugin:ifauthex" class="breadcrumbs" title="plugin:ifauthex">ifauthex</a></bdi></span></div> </div> <hr class="a11y" /> </div></header><!-- /header --> <div class="wrapper group"> <!-- ********** ASIDE ********** --> <nav id="dokuwiki__aside" aria-label="Sidebar"><div class="pad aside include group"> <h3 class="toggle">Sidebar</h3> <div class="content"><div class="group"> <p> <strong>Learn about DokuWiki</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/features" class="wikilink1" title="features" data-wiki-id="features">Features</a> & <a href="/blogroll" class="wikilink1" title="blogroll" data-wiki-id="blogroll">reviews</a> </div> </li> <li class="level1"><div class="li"> <a href="/install" class="wikilink1" title="install" data-wiki-id="install">Installation guide</a></div> </li> <li class="level1"><div class="li"> <a href="/manual" class="wikilink1" title="manual" data-wiki-id="manual">User manual</a> & <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a></div> </li> <li class="level1"><div class="li"> <a href="/changes" class="wikilink1" title="changes" data-wiki-id="changes">Release notes</a></div> </li> <li class="level1"><div class="li"> <a href="/faq" class="wikilink1" title="faq" data-wiki-id="faq">FAQ</a></div> </li> </ul> <p> <strong>Advanced Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/extensions" class="wikilink1" title="extensions" data-wiki-id="extensions">Extensions</a></div> </li> <li class="level1"><div class="li"> <a href="/development" class="wikilink1" title="development" data-wiki-id="development">Development manual</a></div> </li> </ul> <p> <strong>Corporate Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/faq:support" class="wikilink1" title="faq:support" data-wiki-id="faq:support">Get support</a></div> </li> <li class="level1"><div class="li"> <a href="/donate" class="wikilink1" title="donate" data-wiki-id="donate">Donations</a></div> </li> </ul> <p> <strong>Our Community</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/teams:getting_involved" class="wikilink1" title="teams:getting_involved" data-wiki-id="teams:getting_involved">Get involved</a></div> </li> <li class="level1"><div class="li"> <a href="/dokuinstall" class="wikilink1" title="dokuinstall" data-wiki-id="dokuinstall">Users</a></div> </li> <li class="level1"><div class="li"> <a href="http://forum.dokuwiki.org" class="urlextern" title="http://forum.dokuwiki.org">User forum</a></div> </li> <li class="level1"><div class="li"> <a href="/mailinglist" class="wikilink1" title="mailinglist" data-wiki-id="mailinglist">Development mailinglist</a></div> </li> </ul> <hr /> <p> Follow us on <a href="https://phpc.social/@dokuwiki" class="urlextern" title="https://phpc.social/@dokuwiki">Mastodon</a> and other <a href="/social" class="wikilink1" title="social" data-wiki-id="social">social networks</a>. </p> <p> <a href="/privacy" class="wikilink1" title="privacy" data-wiki-id="privacy">Our Privacy Policy</a> </p> </div></div> </div></nav><!-- /aside --> <!-- ********** CONTENT ********** --> <main id="dokuwiki__content"><div class="pad group"> <div class="pageId"><span>plugin:ifauthex</span></div> <div class="page group"> <!-- wikipage start --> <!-- TOC START --> <div id="dw__toc" class="dw__toc"> <h3 class="toggle">Table of Contents</h3> <div> <ul class="toc"> <li class="level1"><div class="li"><a href="#ifauthex_plugin">IfAuthEx Plugin</a></div> <ul class="toc"> <li class="level2"><div class="li"><a href="#installation">Installation</a></div></li> <li class="level2"><div class="li"><a href="#examples_usage">Examples/Usage</a></div></li> <li class="level2"><div class="li"><a href="#syntax">Syntax</a></div> <ul class="toc"> <li class="level3"><div class="li"><a href="#quoting_names">Quoting names</a></div></li> </ul> </li> <li class="level2"><div class="li"><a href="#remarks_and_limitations">Remarks and limitations</a></div></li> <li class="level2"><div class="li"><a href="#compatibility_with_the_ifauth_plugin">Compatibility with the ifauth plugin</a></div></li> <li class="level2"><div class="li"><a href="#development">Development</a></div></li> </ul></li> </ul> </div> </div> <!-- TOC END --> <h1 class="sectionedit1" id="ifauthex_plugin">IfAuthEx Plugin</h1> <div class="level1"> <div class="pluginrepo_entry"><div class="usageInfo"><div class="compatibility"><p class="label">Compatible with DokuWiki</p><div class="versions"><ul><li class="yes">2024-02-06 "Kaos" <strong><span>yes</span></strong></li><li class="">2023-04-04 "Jack Jackrum" <strong><span>unknown</span></strong></li><li class="yes">2022-07-31 "Igor" <strong><span>yes</span></strong></li><li class="yes">2020-07-29 "Hogfather" <strong><span>yes</span></strong></li></ul></div></div><ul class="actions"><li><a class="download" href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/jobs/artifacts/v0.3/raw/ifauthex.zip?job=package">Download</a></li><li><a class="bugs" href="https://github.com/mittelab/ifauthex-dokuwiki-plugin/issues">Report bugs</a></li><li><a class="donate" href="https://www.mittelab.org/en/">Donate</a></li></ul><div class="clearer"></div></div><div class="mainInfo"><p class="description"><a class="media" href="/plugins"><img alt="plugin" class="medialeft" src="/lib/plugins/pluginrepo/images/dwplugin.png" width="60" height="60" /></a> Toggle DokuWiki page content based on users and groups with arbitrary boolean expressions</p></div><div class="metaInfo"><dl><dt>Last updated on</dt><dd>2023-02-08</dd><dt>Provides</dt><dd><a href="/plugins?plugintype=1#extension__table" class="wikilink1" title="List all Syntax plugins">Syntax</a></dd><dt>Repository</dt><dd><a class="urlextern" href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin">Source</a></dd><dt>Conflicts with</dt><dd><a href="/plugin:autotooltip" class="wikilink1" title="plugin:autotooltip" data-wiki-id="plugin:autotooltip">autotooltip</a></dd></dl></div><div class="moreInfo"><p class="similar">Similar to <a href="/plugin:condition" class="wikilink1" title="plugin:condition" data-wiki-id="plugin:condition">condition</a>, <a href="/plugin:ifauth" class="wikilink1" title="plugin:ifauth" data-wiki-id="plugin:ifauth">ifauth</a>, <a href="/plugin:isauth" class="wikilink1" title="plugin:isauth" data-wiki-id="plugin:isauth">isauth</a>, <a href="/plugin:nodisp" class="wikilink1" title="plugin:nodisp" data-wiki-id="plugin:nodisp">nodisp</a>, <a href="/plugin:showif" class="wikilink1" title="plugin:showif" data-wiki-id="plugin:showif">showif</a>, <a href="/plugin:showwhen" class="wikilink1" title="plugin:showwhen" data-wiki-id="plugin:showwhen">showwhen</a></p><p class="tags">Tagged with <a href="/plugins?plugintag=acl#extension__table" class="wikilink1" title="List all plugins with this tag">acl</a>, <a href="/plugins?plugintag=groups#extension__table" class="wikilink1" title="List all plugins with this tag">groups</a>, <a href="/plugins?plugintag=hide#extension__table" class="wikilink1" title="List all plugins with this tag">hide</a>, <a href="/plugins?plugintag=if#extension__table" class="wikilink1" title="List all plugins with this tag">if</a>, <a href="/plugins?plugintag=users#extension__table" class="wikilink1" title="List all plugins with this tag">users</a></p></div><div class="authorInfo"><strong>By <a href="mailto:lizardm4%20%5Bat%5D%20gmail%20%5Bdot%5D%20com" class="mail" title="lizardm4 [at] gmail [dot] com">Pietro Saccardi</a></strong></div></div> </div> <div class="secedit editbutton_section editbutton_1"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[IfAuthEx Plugin] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="ifauthex_plugin" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="1-750" /><button type="submit" title="IfAuthEx Plugin">Edit</button></div></form></div> <h2 class="sectionedit2" id="installation">Installation</h2> <div class="level2"> <p> Please use the <a href="/plugin:extension" class="wikilink1" title="plugin:extension" data-wiki-id="plugin:extension">extension manager</a> to install the plugin, no configuration needed. </p> <p> For manual install, use the <abbr title="Uniform Resource Locator">URL</abbr> above and refer to <a href="/plugins" class="wikilink1" title="plugins" data-wiki-id="plugins">Plugins</a>. </p> </div> <div class="secedit editbutton_section editbutton_2"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Installation] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="installation" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="751-945" /><button type="submit" title="Installation">Edit</button></div></form></div> <h2 class="sectionedit3" id="examples_usage">Examples/Usage</h2> <div class="level2"> <p> 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 <a href="/plugin:nodisp" class="wikilink1" title="plugin:nodisp" data-wiki-id="plugin:nodisp">nodisp</a> plugin. </p> <pre class="code"><ifauth @user> Visible only to logged in users <ifauth !testuser> Visible to all logged in users except ''testuser'' </ifauth> </ifauth></pre> <pre class="code"><ifauth @admin> Visible only to admins </ifauth></pre> <pre class="code"><ifauth testuser> Visible only to the user ''testuser'' </ifauth></pre> <pre class="code"><ifauth @user && !@admin> Visible only to logged in users who are not admins </ifauth></pre> <pre class="code"><ifauth !eviluser> Hidden to ''eviluser'' </ifauth></pre> <pre class="code"><ifauth @経営企画本部 && !@企画部> Visible to the corporate planning division but not the planning department. This requires the ''mbstring'' extension to be loaded. </ifauth></pre> <pre class="code"><ifauth !@user> Hidden to logged in users </ifauth></pre> <pre class="code"><ifauth !@user || testuser> Visible only to ''testuser'' or when you are not logged in </ifauth></pre> <pre class="code"><ifauth @staff && @admin> Visible only to members of the staff who are admin too </ifauth></pre> <p> In the examples above </p> <ul> <li class="level1"><div class="li"> these are all groups: <code>user</code>, <code>admin</code>, <code>staff</code>, <code>経営企画本部</code>, <code>企画部</code></div> </li> <li class="level1"><div class="li"> these are all users: <code>testuser</code>, <code>eviluser</code></div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_3"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Examples/Usage] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="examples_usage" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="946-2328" /><button type="submit" title="Examples/Usage">Edit</button></div></form></div> <h2 class="sectionedit4" id="syntax">Syntax</h2> <div class="level2"> <p> Basic syntax: </p> <pre class="code"><ifauth EXPR>Content to selectively display</ifauth></pre> <p> The content will be rendered only if the access condition described by <code>EXPR</code> is satisfied. <code>EXPR</code> is built using the standard PHP logical operators NOT <code>!</code>, AND <code>&&</code>, OR <code>||</code> and the parentheses <code>(SUBEXPR)</code>. The access conditions are described using the following literals: </p> <ul> <li class="level1"><div class="li"> <code>@group</code> true if and only if the viewing user is a member of <code>group</code></div> </li> <li class="level1"><div class="li"> <code>user</code> (not preceded by <code>@</code>): true exclusively if <code>user</code> is the viewer of the page</div> </li> </ul> <p> You can form arbitrary expressions such as the ones in the examples above, or more sophisticated such as <code>(usr1 || @grp1 || usr2) && (@grp2 || !@grp3 && @grp4)</code>. </p> <p> In user names and group names, you can use letters, numbers, dots <code>.</code>, dashes <code>-</code>, and underscores <code>_</code>. In fact, you can use anything matched by the regular expression <code>[\w.-]+</code>, including UTF-8 multibyte characters (although that requires the <code>mbstring</code> extension to be active). </p> <p> If you need to use any other character, you must wrap the user name in double quotes, e.g. <code>"user name with space"</code>, see <a href="#quoting_names" title="plugin:ifauthex ↵" class="wikilink1">below</a>. </p> <ul> <li class="level1"><div class="li"> <strong>Not quoted whitespace in the expression is ignored.</strong></div> </li> <li class="level1"><div class="li"> <strong>For compatibility with the <a href="/plugin:ifauth" class="wikilink1" title="plugin:ifauth" data-wiki-id="plugin:ifauth">ifauth Plugin</a>, you may use a comma <code>,</code> instead of the OR operator <code>||</code>.</strong></div> </li> <li class="level1"><div class="li"> <strong>Multibyte strings in UTF-8 require <code>mbstring</code> to be loaded.</strong></div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_4"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Syntax] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="syntax" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2329-3746" /><button type="submit" title="Syntax">Edit</button></div></form></div> <h3 class="sectionedit5" id="quoting_names">Quoting names</h3> <div class="level3"> <p> If you have user or group names which contains characters other than those mentioned above (<code>[\w.-]+</code>), you can still specify them, but you have to quote them. The rules are as follows: </p> <ul> <li class="level1"><div class="li"> Wrap the whole name in double quotes <code>"user or group name"</code>.</div> </li> <li class="level1"><div class="li"> If you have a backslash in the name, you must double it: <code>"DOMAIN\\Users"</code> identifies <code>DOMAIN\Users</code>.</div> </li> <li class="level1"><div class="li"> If you <em>really</em> have a double quote in a name, you must escape it with a backslash: <code>"A quote \" in the name"</code> identifies <code>A quote " in the name</code>.</div> </li> </ul> <p> Quotes go around the user name and group name; logical operators (e.g. <code>!</code>) and the in-group operator <code>@</code> remain outside, as in <code>@"DOMAIN\\Admins" && !"DOMAIN\\EvilAdmin"</code>. </p> </div> <div class="secedit editbutton_section editbutton_5"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Quoting names] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="quoting_names" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="3747-4495" /><button type="submit" title="Quoting names">Edit</button></div></form></div> <h2 class="sectionedit6" id="remarks_and_limitations">Remarks and limitations</h2> <div class="level2"> <ul> <li class="level1"><div class="li"> <strong>Pages using IfAuthEx cannot be cached.</strong><br/> Obviously, they need to be re-rendered depending on who's viewing. You do not need to add <code>~~NOCACHE~~</code>, it's done automatically.</div> </li> <li class="level1"><div class="li"> <strong>The “hidden content” will still be readable in the source of the page,</strong><br/> if the user is allowed to edit the page content. The plugin is meant to tailor the page to different users, not to guarantee secrecy. If that's what you are looking for, you may want to create a separate page with different access rights.</div> </li> <li class="level1"><div class="li"> <strong>The plugin removes <code><p></code> tags around its content,</strong><br/> in the attempt of removing any extra unspecified markup.</div> </li> <li class="level1"><div class="li"> <strong>Starting from v0.3, you can now nest the <code><ifauth></code> classes.</strong></div> </li> <li class="level1"><div class="li"> <strong>Non-existent groups and users always evaluate to false.</strong><br/> Watch out for misspelled groups. e.g. @user<strong>s</strong> <pre class="code"><ifauth @users && !@admin> This content will be accidentally visible to admins. </ifauth></pre> </div> </li> <li class="level1"><div class="li"> <strong>Malformed expressions will not render.</strong><br/> If your expression is not valid, the content won't render.<pre class="code"><ifauth me && someoneelse &&> This will never render, did you forget something? </ifauth></pre> </div> </li> <li class="level1 node"><div class="li"> <strong>Sections are unaffected by IfAuthEx</strong>.<br/> This means that independently of where you put <code><ifauth></code>, sections start after a header and end before the next header. This has some consequences:</div> <ul> <li class="level2"><div class="li"> When you edit a section, you might find an open <code><ifauth></code> tag without corresponding <code></ifauth></code> (because it is in the <em>next</em> section).</div> </li> <li class="level2"><div class="li"> If the <em>first</em> page header is inside a hidden <code><ifauth></code> block, a (possibly empty) section will be opened. This is needed because the next header will close any previously opened section, independently of whether it has been displayed or not.</div> </li> </ul> </li> </ul> </div> <div class="secedit editbutton_section editbutton_6"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Remarks and limitations] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="remarks_and_limitations" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="4496-6263" /><button type="submit" title="Remarks and limitations">Edit</button></div></form></div> <h2 class="sectionedit7" id="compatibility_with_the_ifauth_plugin">Compatibility with the ifauth plugin</h2> <div class="level2"> <p> This plugin intends to replace the <a href="/plugin:ifauth" class="wikilink1" title="plugin:ifauth" data-wiki-id="plugin:ifauth">ifauth Plugin</a>, 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. </p> <p> 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 <code>@members && !@admin</code>, and this simple expression already cannot be specified in ifauth. So we generalized the syntax to arbitrary Boolean expression (in for a penny…). </p> </div> <div class="secedit editbutton_section editbutton_7"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Compatibility with the ifauth plugin] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="compatibility_with_the_ifauth_plugin" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="6264-6905" /><button type="submit" title="Compatibility with the ifauth plugin">Edit</button></div></form></div> <h2 class="sectionedit8" id="development">Development</h2> <div class="level2"> <p> (Consider a request for an 'else' option to go with the 'if' please? So you would have one option or the other.) </p> <p> Goes without saying, this plugin <strong>does not use <code>eval</code></strong>. </p> <p> 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 <code>ifauthex/lib/</code>, in the files <code>tokenizer.php</code>, <code>parser.php</code>, <code>exceptions.php</code>. </p> <p> The grammar for this specific application is independently defined in <code>ifauthex/lib/grammar.php</code>, so tokenizer, lexer and parsers could be reused for other plugins. </p> </div> <h4 id="change_log">Change Log</h4> <div class="level4"> <p> <a href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/releases" class="urlextern" title="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/releases">Release list</a> </p> <ul class="rss"><li><div class="li"><a href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.3" class="urlextern" title="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.3">v0.3</a><div class="detail">Support nested tags, fix broken TOC and hidden first header</div></div></li><li><div class="li"><a href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.2" class="urlextern" title="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.2">v0.2</a><div class="detail">Multibyte string support, less restrictive literals, quoted literals.</div></div></li><li><div class="li"><a href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.1" class="urlextern" title="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.1">v0.1</a><div class="detail">Fix section editing.</div></div></li><li><div class="li"><a href="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.0" class="urlextern" title="https://git.mittelab.org/proj/ifauthex-dokuwiki-plugin/-/tags/v0.0">v0.0</a><div class="detail">First release.</div></div></li></ul> </div> <div class="secedit editbutton_section editbutton_8"><form class="button btn_secedit" method="post" action="/plugin:ifauthex"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1718358453" /><input type="hidden" name="summary" value="[Development] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="development" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="6906-" /><button type="submit" title="Development">Edit</button></div></form></div> <!-- wikipage stop --> </div> <div class="docInfo"><bdi>plugin/ifauthex.txt</bdi> · Last modified: <time datetime="2024-06-14T11:47:33+0200">2024-06-14 11:47</time> by <bdi>193.237.218.88</bdi></div> <hr class="a11y" /> </div></main><!-- /content --> <!-- PAGE ACTIONS --> <nav id="dokuwiki__pagetools" aria-labelledby="dokuwiki__pagetools__heading"> <h3 class="a11y" id="dokuwiki__pagetools__heading">Page Tools</h3> <div class="tools"> <ul> <li class="edit"><a href="/plugin:ifauthex?do=edit" title="Edit this page [e]" rel="nofollow" accesskey="e"><span>Edit this page</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg></a></li><li class="revs"><a href="/plugin:ifauthex?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o"><span>Old revisions</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg></a></li><li class="backlink"><a href="/plugin:ifauthex?do=backlink" title="Backlinks" rel="nofollow"><span>Backlinks</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg></a></li><li class="top"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t"><span>Back to top</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg></a></li> </ul> </div> </nav> </div><!-- /wrapper --> <!-- ********** FOOTER ********** --> <footer id="dokuwiki__footer"><div class="pad"> <div class="license">Except where otherwise noted, content on this wiki is licensed under the following license: <bdi><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license" class="urlextern">CC Attribution-Share Alike 4.0 International</a></bdi></div> <div class="buttons"> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license"><img src="/lib/images/license/button/cc-by-sa.png" alt="CC Attribution-Share Alike 4.0 International" /></a> <a href="https://www.dokuwiki.org/donate" title="Donate" ><img src="/lib/tpl/dokuwiki/images/button-donate.gif" width="80" height="15" alt="Donate" /></a> <a href="https://php.net" title="Powered by PHP" ><img src="/lib/tpl/dokuwiki/images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a> <a href="//validator.w3.org/check/referer" title="Valid HTML5" ><img src="/lib/tpl/dokuwiki/images/button-html5.png" width="80" height="15" alt="Valid HTML5" /></a> <a href="//jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS" ><img src="/lib/tpl/dokuwiki/images/button-css.png" width="80" height="15" alt="Valid CSS" /></a> <a href="https://dokuwiki.org/" title="Driven by DokuWiki" ><img src="/lib/tpl/dokuwiki/images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a> </div> <div style="margin-top: 2em; font-size:90%" class="dokuwiki"><div style="float:right"><a href="http://www.splitbrain.org/personal#imprint" style="float:right; text-decoration: none; color:#333">Imprint</a></div></div><!-- Include for DokuWiki site wide top bar --> <style type="text/css"> @media screen { body { padding-top: 30px; } #global__header { position: absolute; top: 0; left: 0; text-align: left; vertical-align: middle; line-height: 1.5; background-color: #333; box-shadow: 0 0 8px rgba(0,0,0,0.5); width: 100%; margin: 0; padding: 5px 20px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; white-space: nowrap; overflow: hidden; } #global__header h2 { position: absolute; left: -99999em; top: 0; overflow: hidden; display: inline; } #global__header ul, #global__header li { margin: 0; padding: 0; list-style: none; display: inline; line-height: 1.5; } #global__header a { color: #bbb; text-decoration: none; margin-right: 20px; font-size: 14px; font-weight: normal; } #global__header a:hover, #global__header a:active, #global__header a:focus { color: #fff; text-decoration: underline; } #global__header form { float: right; margin: 0 0 0 20px; } #global__header input { background-color: #333; background-image: none; border: 1px solid #bbb; color: #fff; box-shadow: none; border-radius: 2px; margin: 0; line-height: normal; padding: 1px 0 1px 0; height: auto; } #global__header input.button { border: none; color: #bbb; } #global__header input.button:hover, #global__header input.button:active, #global__header input.button:focus { color: #fff; text-decoration: underline; } } /* /@media */ @media only screen and (min-width: 601px) { /* changes specific for www.dokuwiki.org */ #dokuwiki__header { padding-top: 3em; } #dokuwiki__usertools { top: 3em; } /* changes specific for bugs.dokuwiki.org */ div#container div#showtask { top: 40px; } } /* /@media */ @media only screen and (max-width: 600px) { body { padding-top: 0; } #global__header { position: static; white-space: normal; overflow: auto; } #global__header form { float: none; display: block; margin: 0 0 .4em; } } /* /@media */ @media print { #global__header { display: none; } } /* /@media */ </style> <div id="global__header"> <h2>Global DokuWiki Links</h2> <form method="get" action="https://search.dokuwiki.org/" target="_top"> <input type="text" name="q" title="Search all DokuWiki sites at once" class="input" /> <input type="submit" title="Search all DokuWiki sites at once" value="Search" class="button" /> </form> <ul> <li><a href="https://download.dokuwiki.org" title="Download the latest release" target="_top">Download</a></li> <li><a href="https://www.dokuwiki.org" title="Read the DokuWiki documentation" target="_top">Wiki</a></li> <li><a href="https://forum.dokuwiki.org" title="Ask questions in the DokuWiki forum" target="_top">Forum</a></li> <li><a href="https://irc.dokuwiki.org" title="Check IRC chat logs or join the chat" target="_top">IRC</a></li> <li><a href="https://github.com/splitbrain/dokuwiki/issues" title="Report and track bugs" target="_top">Bugs</a></li> <li><a href="https://translate.dokuwiki.org/" title="Help translating the DokuWiki interface" target="_top">Translate</a></li> <li><a href="https://github.com/splitbrain/dokuwiki" title="Access the most recent git commits" target="_top">Git</a></li> <li><a href="https://xref.dokuwiki.org/reference/dokuwiki/" title="Cross-Reference of the DokuWiki source code" target="_top">XRef</a></li> <li><a href="https://codesearch.dokuwiki.org/" title="Search through the sources of DokuWiki, plugins and templates" target="_top">Code Search</a></li> </ul> </div> <!-- end of DokuWiki top bar include --> </div></footer><!-- /footer --> </div></div><!-- /site --> <div class="no"><img src="/lib/exe/taskrunner.php?id=plugin%3Aifauthex&1743385856" width="2" height="1" alt="" /></div> <div id="screen__mode" class="no"></div></body> </html>