테이블에서 불필요한 키를 찾아서 제거하려면 여기에 설명 된 Lua 함수를 작성했습니다. http://lua-users.org/wiki/SaveTableToFile.
function remove_idx( tbl, index)
-- initiate variables for save procedure
local tables,lookup = { tbl },{ [tbl] = 1 }
for idx,t in ipairs(tables) do
local thandled = {}
for i,v in ipairs(t) do
thandled[i] = true
local stype = type(v)
-- only handle value
if stype == "table" then
if not lookup[v] then
table.insert(tables, v)
lookup[v] = #tables
end
else
if i == index then
t[i] = nil
return
end
end
end
for i,v in pairs(t) do
-- escape handled values
if (not thandled[i]) then
local flag = 0
local stype = type(i)
-- handle index
if stype == "table" then
if not lookup[i] then
table.insert(tables,i)
lookup[i] = #tables
end
else
flag = 1
if i == index then
t[i] = nil
return
end
end
if flag == 1 then
stype = type(v)
-- handle value
if stype == "table" then
if not lookup[v] then
table.insert(tables,v)
lookup[v] = #tables
end
else
if i == index then
t[i] = nil
return
end
end
end
end
end
end
end
그리고 내 사용자 확인 및 페이지 libs와에서 후 삭제 삽입/웹/luasrc/dispatcher.lua 파견() :
if c and c.index then
local tpl = require "luci.template"
if util.copcall(tpl.render, "indexer", {}) then
return true
end
end
내가 로그인 한 사람에 따라 불필요한 페이지를 제거하는 방법 :
if ctx.authuser == "user" then
remove_idx(ctx.tree, "packages")
remove_idx(ctx.tree, "leds")
end
조금 빠르고 더럽지 만 작동합니다. URL을 조작하는 에 의한 직접 액세스가 여전히 가능하다는 점에 유의하십시오.
업데이트
LuCI2는 ACL 지원 싶게 다중 사용자 환경을 제공 할 것입니다 : 공유 솔루션에 대한 http://git.openwrt.org/?p=project/luci2/ui.git;a%3Dsummary
감사합니다. 나는 간단한 질문이있다 : 나는 remove_idx가 어떤 파일에 쓰는지 모른다. dispatch() 함수 또는 dispatch() 'modifi dispatch()'뒤에 "user check"을 추가하십시오. 어디에서 "불필요한 페이지 제거"코드를 사용합니까? 혼란 스럽습니다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. – omid
'remove_idx' 기능과 사용자 체크를 추가했지만 메뉴 첫 페이지 렌더링에서 항목 만 제거했습니다. 다시로드하거나 다른 페이지로 이동하면'leds'와'packages' 항목이 돌아가서 메뉴에서 사용할 수 있습니다. 나는 나쁜 코드를 사용하여 사용자 코드를 검사 할 수 있습니다. 제발 저를 도울 수 있습니까? – omid
'remove_idx()'와 인증 검사는 모두'libs/web/luasrc/dispatcher.lua' 파일에 있어야합니다. 왜냐하면 전체 색인 트리는 라우터 웹 인터페이스를 열 자마자 만들어지기 때문입니다. 사용자 인증 확인은 답안에서 보여준 코드 직후에'dispatch()'루틴에 있어야합니다. 인덱스 트리가 채워지는 루틴입니다. – yegorich