# HG changeset patch # User HIROSE Yuuji # Date 1590030028 -32400 # Node ID 5cf0ba49aeabf3aa0db4f2873124f512739cd47a # Parent c45ab714d68e798bdf806a7d88729ff458f35754 Attached file of admin in quiz-mode blog can be accessible by normal users diff -r c45ab714d68e -r 5cf0ba49aeab s4-blog.sh --- a/s4-blog.sh Tue May 19 11:49:11 2020 +0900 +++ b/s4-blog.sh Thu May 21 12:00:28 2020 +0900 @@ -176,8 +176,39 @@ *) notifyto="" ;; esac case $blog_mode in - *quiz*|*close*|*euquete*) f_exclusive=1 ;; - *) f_exclusive='' ;; + *quiz*|*close*) + f_exclusive=1 + if $isgroup; then + qgrp=`sqlquote "$blogowner"` + if $isgrpadmin; then + F_UNREADABLE="''" + else + if [ x"$blog_mode" = x"quiz" ]; then + F_UNREADABLE="CASE + WHEN author IN (SELECT user FROM grp_adm WHERE gname=$qgrp) + THEN '' + WHEN author = '$user' + THEN '' + ELSE 'Unreadable' + END" + else + F_UNREADABLE='Unreadable' + fi + fi + else # User blog + if [ x"$blog_mode" = x"quiz" ]; then + F_UNREADABLE="CASE + WHEN author = '$blogowner' + THEN '' ELSE 'Unreadable' + END" + else + F_UNREADABLE='Unradable' + fi + fi + ;; + *) f_exclusive='' + F_UNREADABLE="''" + ;; esac # err "SELECT id from $tbl where rowid=$rowid" @@ -324,12 +355,9 @@ END reki, CASE WHEN s.TIME > '$atime' THEN 'new' ELSE '' END newer, hex(s.TEXT), - CASE -- File Accessibility to attached file - WHEN '$f_exclusive' = '' THEN '' - WHEN '$isgrpadmin' = 'true' THEN '' - WHEN '$user' = author THEN '' - ELSE 'Unreadable' - END cannotread, + + $F_UNREADABLE cannotread, + (SELECT group_concat(rowid||':'||length(bin)||':'||hex(val), ' ') FROM article_m WHERE id=a.id AND key='image') imxgids diff -r c45ab714d68e -r 5cf0ba49aeab s4-funcs.sh --- a/s4-funcs.sh Tue May 19 11:49:11 2020 +0900 +++ b/s4-funcs.sh Thu May 21 12:00:28 2020 +0900 @@ -483,33 +483,49 @@ # fi # esac # ↑ 要はこういう処理を↓で一気にやっている - sql="with getblog as (\ - select key,val from blog_s where id=(\ - select blogid from article where id in\ - (select id from $2 where rowid=$3))),\ - getowner as (select val from getblog where key='owner'),\ - getmode as (select val from getblog where key='mode')\ - select case\ - when (select author from article where\ - id=(select id from $2 where rowid=$3))='$1' \ - then 'author'\ - when (select val from getmode) in ('report-open', 'normal')\ - then 'open'\ - when (select val from getmode) is null \ + sql="with getblog as ( + select key,val from blog_s where id=( + select blogid from article where id in + (select id from $2 where rowid=$3))), + getowner as (select val from getblog where key='owner'), + getauthor as (select author from article where id=(select id from $2 where rowid=$3)), + isgrp as (SELECT val from getowner WHERE val IN (select gname from grp)), + isgrpadm as (select user from grp_adm where + gname=(select val from getowner) and + user='$1'), + getmode as (select val from getblog where key='mode') + select case + when (select author from article where + id=(select id from $2 where rowid=$3))='$1' + then 'author' + when (select val from getmode) in ('report-open', 'normal') then 'open' - when (select val from getowner) in (select gname from grp)\ - then (select user from grp_adm where \ - gname=(select val from getowner) and \ - user='$1')\ - when (select author from article where\ + when (select val from getmode) in ('quiz', 'enquete') + then CASE + WHEN (SELECT val FROM isgrp) IS NULL + THEN + CASE WHEN (SELECT val from getowner) + IN ('$user', (SELECT author FROM getauthor)) + THEN 'owner-or-user-article-is-readable' + ELSE '' + END + WHEN (select user from isgrpadm) IS NOT NULL + THEN 'i-am-admin' + ELSE (SELECT author from getauthor WHERE author IN (SELECT user FROM grp_adm WHERE gname=(SELECT val FROM getowner))) + END + when (select val from getmode) is null + then 'open' + when (select val from getowner) in (select gname from grp) + then (SELECT user FROM isgrpadm) + when (select author from article where id=(select id from $2 where rowid=$3))='$1' then 'user+author' else '' end;" ## err isfilereadable: sql="`echo $sql`" # caseのネストで内側のcaseがスカラーtrueを返しても外側はtrue扱いにならない - result=`query "$sql"` - [ -n "$result" ] && return 0 - return 2 + # result=`query "$sql"` + # err FileAccessibility=$result + [ -n "`query $sql`" ] || return 2 } linkhome() { # $1=UserOrGroup