View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 20738 | Bug reports | Security | public | 2026-09-29 17:31 | 2026-10-01 12:33 |
| Reporter | jpvieira | Assigned To | stefankotes | ||
| Priority | none | Severity | partial_block | ||
| Status | closed | Resolution | fixed | ||
| Product Version | 7.0.x | ||||
| Summary | 20738: New editor denies access to users whose survey access comes from survey group permissions (classic editor works) | ||||
| Description | A user with no superadmin and no global "surveys" permissions, whose access to a survey comes This is NOT a webserver configuration issue. On the same installation, superadmins use the new Cause: The new editor's guard in editor/src/providers/PermissionsProvider.js derives access solely from As a result, three access paths that Survey::hasPermission() (application/models/Survey.php, used
The REST backend itself is correct: SurveyDetail and the patch handlers use hasSurveyPermission() Suggested fix: have UserPermission return effective survey permissions (resolving ownership, group Additional information:
| ||||
| Steps To Reproduce | Steps to reproduce
Expected resultThe new editor opens the survey, applying the same permission resolution as the classic editor Actual resultStep 7 (classic editor): the survey opens and can be edited normally. /rest/v1/user-permissions returns HTTP 200, but its payload contains no entry for this survey, | ||||
| Tags | No tags attached. | ||||
| Attached Files | limesurvey_survey_812361.lss (16,357 bytes)
<?xml version="1.0" encoding="UTF-8"?>
<document>
<LimeSurveyDocType>Survey</LimeSurveyDocType>
<DBVersion>709</DBVersion>
<languages>
<language>pt</language>
</languages>
<groups>
<fields>
<fieldname>gid</fieldname>
<fieldname>sid</fieldname>
<fieldname>group_order</fieldname>
<fieldname>randomization_group</fieldname>
<fieldname>grelevance</fieldname>
</fields>
<rows>
<row>
<gid><![CDATA[189]]></gid>
<sid><![CDATA[812361]]></sid>
<group_order><![CDATA[1]]></group_order>
<randomization_group/>
<grelevance><![CDATA[1]]></grelevance>
</row>
<row>
<gid><![CDATA[190]]></gid>
<sid><![CDATA[812361]]></sid>
<group_order><![CDATA[2]]></group_order>
<randomization_group/>
<grelevance/>
</row>
</rows>
</groups>
<group_l10ns>
<fields>
<fieldname>id</fieldname>
<fieldname>gid</fieldname>
<fieldname>group_name</fieldname>
<fieldname>description</fieldname>
<fieldname>language</fieldname>
<fieldname>sid</fieldname>
<fieldname>group_order</fieldname>
<fieldname>randomization_group</fieldname>
<fieldname>grelevance</fieldname>
</fields>
<rows>
<row>
<id><![CDATA[210]]></id>
<gid><![CDATA[189]]></gid>
<group_name><![CDATA[O meu primeiro grupo de perguntas]]></group_name>
<description/>
<language><![CDATA[pt]]></language>
<sid><![CDATA[812361]]></sid>
<group_order><![CDATA[1]]></group_order>
<randomization_group/>
<grelevance><![CDATA[1]]></grelevance>
</row>
<row>
<id><![CDATA[211]]></id>
<gid><![CDATA[190]]></gid>
<group_name/>
<description/>
<language><![CDATA[pt]]></language>
<sid><![CDATA[812361]]></sid>
<group_order><![CDATA[2]]></group_order>
<randomization_group/>
<grelevance/>
</row>
</rows>
</group_l10ns>
<questions>
<fields>
<fieldname>qid</fieldname>
<fieldname>parent_qid</fieldname>
<fieldname>sid</fieldname>
<fieldname>gid</fieldname>
<fieldname>type</fieldname>
<fieldname>title</fieldname>
<fieldname>preg</fieldname>
<fieldname>other</fieldname>
<fieldname>mandatory</fieldname>
<fieldname>encrypted</fieldname>
<fieldname>question_order</fieldname>
<fieldname>scale_id</fieldname>
<fieldname>same_default</fieldname>
<fieldname>relevance</fieldname>
<fieldname>question_theme_name</fieldname>
<fieldname>modulename</fieldname>
<fieldname>same_script</fieldname>
</fields>
<rows>
<row>
<qid><![CDATA[788]]></qid>
<parent_qid><![CDATA[0]]></parent_qid>
<sid><![CDATA[812361]]></sid>
<gid><![CDATA[189]]></gid>
<type><![CDATA[M]]></type>
<title><![CDATA[Q00]]></title>
<other><![CDATA[N]]></other>
<mandatory><![CDATA[N]]></mandatory>
<encrypted><![CDATA[N]]></encrypted>
<question_order><![CDATA[1]]></question_order>
<scale_id><![CDATA[0]]></scale_id>
<same_default><![CDATA[0]]></same_default>
<relevance><![CDATA[1]]></relevance>
<question_theme_name><![CDATA[multiplechoice]]></question_theme_name>
<same_script><![CDATA[0]]></same_script>
</row>
</rows>
</questions>
<question_l10ns>
<fields>
<fieldname>id</fieldname>
<fieldname>qid</fieldname>
<fieldname>question</fieldname>
<fieldname>help</fieldname>
<fieldname>script</fieldname>
<fieldname>language</fieldname>
</fields>
<rows>
<row>
<id><![CDATA[859]]></id>
<qid><![CDATA[788]]></qid>
<question/>
<help/>
<script/>
<language><![CDATA[pt]]></language>
</row>
</rows>
</question_l10ns>
<surveys>
<fields>
<fieldname>sid</fieldname>
<fieldname>gsid</fieldname>
<fieldname>admin</fieldname>
<fieldname>expires</fieldname>
<fieldname>startdate</fieldname>
<fieldname>adminemail</fieldname>
<fieldname>anonymized</fieldname>
<fieldname>format</fieldname>
<fieldname>savetimings</fieldname>
<fieldname>template</fieldname>
<fieldname>language</fieldname>
<fieldname>additional_languages</fieldname>
<fieldname>datestamp</fieldname>
<fieldname>usecookie</fieldname>
<fieldname>allowregister</fieldname>
<fieldname>allowsave</fieldname>
<fieldname>autonumber_start</fieldname>
<fieldname>autoredirect</fieldname>
<fieldname>allowprev</fieldname>
<fieldname>printanswers</fieldname>
<fieldname>ipaddr</fieldname>
<fieldname>ipanonymize</fieldname>
<fieldname>refurl</fieldname>
<fieldname>showsurveypolicynotice</fieldname>
<fieldname>publicstatistics</fieldname>
<fieldname>publicgraphs</fieldname>
<fieldname>listpublic</fieldname>
<fieldname>htmlemail</fieldname>
<fieldname>sendconfirmation</fieldname>
<fieldname>tokenanswerspersistence</fieldname>
<fieldname>assessments</fieldname>
<fieldname>usecaptcha</fieldname>
<fieldname>usetokens</fieldname>
<fieldname>bounce_email</fieldname>
<fieldname>attributedescriptions</fieldname>
<fieldname>emailresponseto</fieldname>
<fieldname>emailnotificationto</fieldname>
<fieldname>tokenlength</fieldname>
<fieldname>showxquestions</fieldname>
<fieldname>showgroupinfo</fieldname>
<fieldname>shownoanswer</fieldname>
<fieldname>showqnumcode</fieldname>
<fieldname>bouncetime</fieldname>
<fieldname>bounceprocessing</fieldname>
<fieldname>bounceaccounttype</fieldname>
<fieldname>bounceaccounthost</fieldname>
<fieldname>bounceaccountpass</fieldname>
<fieldname>bounceaccountencryption</fieldname>
<fieldname>bounceaccountuser</fieldname>
<fieldname>showwelcome</fieldname>
<fieldname>showprogress</fieldname>
<fieldname>questionindex</fieldname>
<fieldname>navigationdelay</fieldname>
<fieldname>alloweditaftercompletion</fieldname>
<fieldname>googleanalyticsstyle</fieldname>
<fieldname>googleanalyticsapikey</fieldname>
<fieldname>tokenencryptionoptions</fieldname>
<fieldname>access_mode</fieldname>
<fieldname>lastmodified</fieldname>
<fieldname>showregisterpolicy</fieldname>
<fieldname>showtokenpolicy</fieldname>
</fields>
<rows>
<row>
<sid><![CDATA[812361]]></sid>
<gsid><![CDATA[1]]></gsid>
<admin><![CDATA[inherit]]></admin>
<adminemail><![CDATA[inherit]]></adminemail>
<anonymized><![CDATA[I]]></anonymized>
<format><![CDATA[I]]></format>
<savetimings><![CDATA[I]]></savetimings>
<template><![CDATA[inherit]]></template>
<language><![CDATA[pt]]></language>
<additional_languages/>
<datestamp><![CDATA[I]]></datestamp>
<usecookie><![CDATA[I]]></usecookie>
<allowregister><![CDATA[I]]></allowregister>
<allowsave><![CDATA[I]]></allowsave>
<autonumber_start><![CDATA[0]]></autonumber_start>
<autoredirect><![CDATA[I]]></autoredirect>
<allowprev><![CDATA[I]]></allowprev>
<printanswers><![CDATA[I]]></printanswers>
<ipaddr><![CDATA[I]]></ipaddr>
<ipanonymize><![CDATA[I]]></ipanonymize>
<refurl><![CDATA[I]]></refurl>
<showsurveypolicynotice><![CDATA[0]]></showsurveypolicynotice>
<publicstatistics><![CDATA[I]]></publicstatistics>
<publicgraphs><![CDATA[I]]></publicgraphs>
<listpublic><![CDATA[I]]></listpublic>
<htmlemail><![CDATA[I]]></htmlemail>
<sendconfirmation><![CDATA[I]]></sendconfirmation>
<tokenanswerspersistence><![CDATA[I]]></tokenanswerspersistence>
<assessments><![CDATA[I]]></assessments>
<usecaptcha><![CDATA[E]]></usecaptcha>
<usetokens><![CDATA[N]]></usetokens>
<bounce_email><![CDATA[inherit]]></bounce_email>
<emailresponseto><![CDATA[inherit]]></emailresponseto>
<emailnotificationto><![CDATA[inherit]]></emailnotificationto>
<tokenlength><![CDATA[-1]]></tokenlength>
<showxquestions><![CDATA[I]]></showxquestions>
<showgroupinfo><![CDATA[I]]></showgroupinfo>
<shownoanswer><![CDATA[I]]></shownoanswer>
<showqnumcode><![CDATA[I]]></showqnumcode>
<bounceprocessing><![CDATA[N]]></bounceprocessing>
<showwelcome><![CDATA[I]]></showwelcome>
<showprogress><![CDATA[I]]></showprogress>
<questionindex><![CDATA[-1]]></questionindex>
<navigationdelay><![CDATA[-1]]></navigationdelay>
<alloweditaftercompletion><![CDATA[I]]></alloweditaftercompletion>
<tokenencryptionoptions/>
<access_mode><![CDATA[O]]></access_mode>
<lastmodified><![CDATA[2026-09-29 15:17:47]]></lastmodified>
<showregisterpolicy><![CDATA[I]]></showregisterpolicy>
<showtokenpolicy><![CDATA[I]]></showtokenpolicy>
</row>
</rows>
</surveys>
<surveys_languagesettings>
<fields>
<fieldname>surveyls_survey_id</fieldname>
<fieldname>surveyls_policy_error</fieldname>
<fieldname>surveyls_email_invite_subj</fieldname>
<fieldname>surveyls_email_invite</fieldname>
<fieldname>surveyls_email_remind_subj</fieldname>
<fieldname>surveyls_email_remind</fieldname>
<fieldname>surveyls_email_register_subj</fieldname>
<fieldname>surveyls_email_register</fieldname>
<fieldname>surveyls_email_confirm_subj</fieldname>
<fieldname>surveyls_email_confirm</fieldname>
<fieldname>surveyls_dateformat</fieldname>
<fieldname>surveyls_attributecaptions</fieldname>
<fieldname>surveyls_alias</fieldname>
<fieldname>email_admin_notification_subj</fieldname>
<fieldname>email_admin_notification</fieldname>
<fieldname>email_admin_responses_subj</fieldname>
<fieldname>email_admin_responses</fieldname>
<fieldname>surveyls_numberformat</fieldname>
<fieldname>attachments</fieldname>
<fieldname>surveyls_language</fieldname>
<fieldname>surveyls_title</fieldname>
<fieldname>surveyls_description</fieldname>
<fieldname>surveyls_welcometext</fieldname>
<fieldname>surveyls_endtext</fieldname>
<fieldname>surveyls_policy_notice</fieldname>
<fieldname>surveyls_policy_notice_label</fieldname>
<fieldname>surveyls_url</fieldname>
<fieldname>surveyls_urldescription</fieldname>
</fields>
<rows>
<row>
<surveyls_survey_id><![CDATA[812361]]></surveyls_survey_id>
<surveyls_policy_error/>
<surveyls_email_invite_subj><![CDATA[Convite para participar num inquérito]]></surveyls_email_invite_subj>
<surveyls_email_invite><![CDATA[Caro(a) {FIRSTNAME},<br />
<br />
Foi convidado para participar num inquérito.<br />
<br />
O inquérito é intitulado de:<br />
"{SURVEYNAME}"<br />
<br />
"{SURVEYDESCRIPTION}"<br />
<br />
Para participar, por favor, utilize a hiperligação indicada mais abaixo.<br />
<br />
Com os melhores cumprimentos,<br />
<br />
{ADMINNAME} ({ADMINEMAIL})<br />
<br />
----------------------------------------------<br />
Clique aqui para aceder ao inquérito:<br />
{SURVEYURL}<br />
<br />
Se não quer participar deste inquérito e não deseja receber mais convites clique p.f. na seguinte ligação:<br />
{OPTOUTURL}<br />
<br />
Se estiver na lista negra mas quiser participar neste inquérito e pretender receber convites, por favor clique no seguinte link:<br />
{OPTINURL}]]></surveyls_email_invite>
<surveyls_email_remind_subj><![CDATA[Lembrete para participar num inquérito]]></surveyls_email_remind_subj>
<surveyls_email_remind><![CDATA[Caro(a) {FIRSTNAME}<br />
<br />
Recentemente, foi convidado a participar num inquérito.<br />
<br />
Notamos que ainda não completou o inquérito, e queremos relembrar que o inquérito ainda está disponível, caso queira tomar parte dele.<br />
<br />
O inquérito tem o título:<br />
"{SURVEYNAME}"<br />
<br />
"{SURVEYDESCRIPTION}"<br />
<br />
Para participar, por favor, carregue no endereço abaixo.<br />
<br />
Com os melhores cumprimentos,<br />
<br />
{ADMINNAME} ({ADMINEMAIL})<br />
<br />
----------------------------------------------<br />
Clique aqui para aceder ao inquérito:<br />
{SURVEYURL}<br />
<br />
Se não quer participar deste inquérito e não deseja receber mais convites clique p.f. na seguinte ligação:<br />
{OPTOUTURL}]]></surveyls_email_remind>
<surveyls_email_register_subj><![CDATA[Confirmação do registo no inquérito]]></surveyls_email_register_subj>
<surveyls_email_register><![CDATA[Caro(a) {FIRSTNAME},<br />
<br />
Registou-se, ou alguém utilizando o seu endereço de correio, para participar no inquérito com o título {SURVEYNAME}.<br />
<br />
Para completar este inquérito, carregue no endereço:<br />
<br />
{SURVEYURL}<br />
<br />
Se tiver alguma pergunta sobre este inquérito, ou se não fez o registo para participar e considera este email um erro, por favor contacte {ADMINNAME} através do endereço electrónico {ADMINEMAIL}.]]></surveyls_email_register>
<surveyls_email_confirm_subj><![CDATA[Confirmação da sua participação no nosso inquérito]]></surveyls_email_confirm_subj>
<surveyls_email_confirm><![CDATA[Caro(a) {FIRSTNAME},<br />
<br />
Este email confirma que completou o inquérito intitulado {SURVEYNAME} e que as suas respostas foram gravadas. Agradecemos a sua participação.<br />
<br />
Se tiver mais perguntas relacionadas com este email, por favor, contacte {ADMINNAME} através do endereço electrónico {ADMINEMAIL}.<br />
<br />
Com os melhores cumprimentos,<br />
<br />
{ADMINNAME}]]></surveyls_email_confirm>
<surveyls_dateformat><![CDATA[5]]></surveyls_dateformat>
<surveyls_alias/>
<email_admin_notification_subj><![CDATA[Resposta à submissão do inquérito {SURVEYNAME}]]></email_admin_notification_subj>
<email_admin_notification><![CDATA[Olá,<br />
<br />
Foi submetida uma nova resposta ao seu inquérito '{SURVEYNAME}'.<br />
<br />
<br />
Clique no endereço seguinte para ver a resposta individual:<br />
{VIEWRESPONSEURL}<br />
<br />
Clique no endereço seguinte para editar a resposta individual:<br />
{EDITRESPONSEURL}<br />
<br />
Para ver estatístias carregue aqui:<br />
{STATISTICSURL}]]></email_admin_notification>
<email_admin_responses_subj><![CDATA[Resposta à submissão do inquérito {SURVEYNAME} incluíndo resultados]]></email_admin_responses_subj>
<email_admin_responses><![CDATA[Olá,<br />
<br />
Foi submetida uma nova resposta ao seu inquérito '{SURVEYNAME}'.<br />
<br />
<br />
Clique no endereço seguinte para ver a resposta individual{VIEWRESPONSEURL}<br />
<br />
Clique no endereço seguinte para editar a resposta individual:<br />
<br />
{EDITRESPONSEURL}<br />
<br />
Para ver estatístias carregue aqui:<br />
<br />
{STATISTICSURL}<br />
<br />
<br />
Em seguida, as respostas do participante:<br />
{ANSWERTABLE}]]></email_admin_responses>
<surveyls_numberformat><![CDATA[1]]></surveyls_numberformat>
<surveyls_language><![CDATA[pt]]></surveyls_language>
<surveyls_title><![CDATA[Inquérito sem título]]></surveyls_title>
<surveyls_description/>
<surveyls_welcometext/>
<surveyls_endtext/>
<surveyls_policy_notice/>
<surveyls_policy_notice_label/>
<surveyls_url/>
<surveyls_urldescription/>
</row>
</rows>
</surveys_languagesettings>
<surveys_groups>
<fields>
<fieldname>gsid</fieldname>
<fieldname>name</fieldname>
<fieldname>title</fieldname>
<fieldname>template</fieldname>
<fieldname>description</fieldname>
<fieldname>parent_id</fieldname>
<fieldname>alwaysavailable</fieldname>
</fields>
<rows>
<row>
<gsid><![CDATA[1]]></gsid>
<name><![CDATA[default]]></name>
<title><![CDATA[Default]]></title>
<description><![CDATA[Default survey group]]></description>
</row>
</rows>
</surveys_groups>
<themes>
<theme>
<sid>812361</sid>
<template_name>fruity_twentythree</template_name>
<config>
<options>inherit</options>
</config>
</theme>
</themes>
<themes_inherited>
<theme>
<sid>812361</sid>
<template_name>fruity_twentythree</template_name>
<config>
<options>
<hideprivacyinfo>off</hideprivacyinfo>
<showpopups>1</showpopups>
<showclearall>off</showclearall>
<questionhelptextposition>top</questionhelptextposition>
<fixnumauto>enable</fixnumauto>
<backgroundimage>off</backgroundimage>
<brandlogo>on</brandlogo>
<brandlogofile>image::theme::files/logo.png</brandlogofile>
<font>opensans</font>
<bodybackgroundcolor>#ffffff</bodybackgroundcolor>
<fontcolor>#444444</fontcolor>
<questionbackgroundcolor>#ffffff</questionbackgroundcolor>
<checkicon>EB7A</checkicon>
<notables>1</notables>
<cornerradius>off</cornerradius>
</options>
</config>
</theme>
</themes_inherited>
</document>
| ||||
| Bug heat | 254 | ||||
| Complete LimeSurvey version number (& build) | 7.0.7+260729 | ||||
| I will donate to the project if issue is resolved | No | ||||
| Browser | |||||
| Database type & version | MariaDB | ||||
| Server OS (if known) | Debian | ||||
| Webserver software & version (if known) | |||||
| PHP Version | 8.4 | ||||
|
Fix committed to master branch: http://bugs.limesurvey.org/plugin.php?page=Source/view&id=40652 |
|
|
Fixed in Release 7.5.0+261001 |
|
|
LimeSurvey: master 8e7dd68f 2026-10-01 11:00 Stefan K Committer: GitHub Details Diff |
Fixed issue 20738: New editor denies access to users whose permissions come from survey group level (05378) |
Affected Issues 20738 |
|
| mod - application/config/rest/v1/permissions.php | Diff File | ||
| mod - application/libraries/Api/Command/V1/UserDetail.php | Diff File | ||
| mod - application/libraries/Api/Command/V1/UserPermission.php | Diff File | ||
| mod - application/libraries/Api/Rest/V1/SchemaFactory/SchemaFactoryUserPermission.php | Diff File | ||
| mv - editor/build/static/css/117.34fd2d85.css → editor/build/static/css/135.dcbb4895.css | Diff File | ||
| rm - editor/build/static/css/index.731c0617.css | Diff | ||
| add - editor/build/static/css/index.7f880c5f.css | Diff File | ||
| rm - editor/build/static/js/117.84e29929.js | Diff | ||
| add - editor/build/static/js/135.384860d7.js | Diff File | ||
| mv - editor/build/static/js/117.84e29929.js.LICENSE.txt → editor/build/static/js/135.384860d7.js.LICENSE.txt | Diff File | ||
| add - editor/build/static/js/async/57.038de187.js | Diff File | ||
| rm - editor/build/static/js/async/57.e0e906f6.js | Diff | ||
| add - editor/build/static/js/index.325d06f1.js | Diff File | ||
| rm - editor/build/static/js/index.5f6af03f.js | Diff | ||
| rm - editor/build/static/js/lib-axios.83949709.js | Diff | ||
| add - editor/build/static/js/lib-axios.d29b975f.js | Diff File | ||
| rm - editor/build/static/js/lib-router.0cdc4daf.js | Diff | ||
| rm - editor/build/static/js/lib-router.0cdc4daf.js.LICENSE.txt | Diff | ||
| add - editor/build/static/js/lib-router.ee91d0d7.js | Diff File | ||
| add - editor/build/static/js/lib-router.ee91d0d7.js.LICENSE.txt | Diff File | ||
| mod - editor/index.html | Diff File | ||
| mod - editor/src/providers/PermissionsProvider.js | Diff File | ||
| mod - editor/src/services/user.service.js | Diff File | ||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2026-09-29 17:31 | jpvieira | New Issue | |
| 2026-09-29 17:31 | jpvieira | File Added: limesurvey_survey_812361.lss | |
| 2026-09-29 18:15 | c_schmitz | View Status | private => public |
| 2026-09-29 18:15 | c_schmitz | Bug heat | 256 => 250 |
| 2026-09-29 18:23 | c_schmitz | Severity | security => partial_block |
| 2026-09-29 19:20 | c_schmitz | Assigned To | => c_schmitz |
| 2026-09-29 19:20 | c_schmitz | Status | new => confirmed |
| 2026-09-29 19:21 | c_schmitz | Assigned To | c_schmitz => stefankotes |
| 2026-09-29 19:21 | c_schmitz | Status | confirmed => assigned |
| 2026-10-01 10:32 | stefankotes | Status | assigned => ready for code review |
| 2026-10-01 10:32 | stefankotes | Status | ready for code review => ready for testing |
| 2026-10-01 10:34 | eusweisker | Status | ready for testing => in testing |
| 2026-10-01 11:00 | Changeset attached | => LimeSurvey master 8e7dd68f | |
| 2026-10-01 11:00 | guest | Note Added: 86146 | |
| 2026-10-01 11:00 | guest | Bug heat | 250 => 252 |
| 2026-10-01 11:01 | eusweisker | Status | in testing => resolved |
| 2026-10-01 11:01 | eusweisker | Resolution | open => fixed |
| 2026-10-01 12:33 | LimeBot | Note Added: 86159 | |
| 2026-10-01 12:33 | LimeBot | Status | resolved => closed |
| 2026-10-01 12:33 | LimeBot | Bug heat | 252 => 254 |