Tablodaki gereksiz anahtarları bulmak ve kaldırmak için burada anlatıldığı gibi bir Lua işlevi oluşturmayı bitirdim: 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
Ve sonra benim Kullanıcının onay ve sayfa kütüphanelerini de sonra silmek takılı/web/luasrc/dispatcher.lua sevk():
if c and c.index then
local tpl = require "luci.template"
if util.copcall(tpl.render, "indexer", {}) then
return true
end
end
ben kaydedilir kim bağlı gereksiz sayfaları kaldırmak nasıl :
if ctx.authuser == "user" then
remove_idx(ctx.tree, "packages")
remove_idx(ctx.tree, "leds")
end
Bu biraz hızlı ve kirli, ama çalışıyor. Lütfen URL'yi yönlendiren numaralı direkt erişimin hala mümkün olduğunu unutmayın.
Güncelleme
LuCI2 ACL desteği und çok kullanıcılı bir ortam sağlayacaktır: payı çözüm için http://git.openwrt.org/?p=project/luci2/ui.git;a%3Dsummary
sayesinde. Basit bir sorum var: remove_idx dosyasının hangi dosyaya yazıldığını bilmiyor muyum? , "user check" öğesini dispatch() işlevinden sonra veya dispatch() 'modifi gönderim()' de ekleyin. ve "gereksiz sayfaları kaldır" kodunu kullanıyorum? Kafam karıştı. Kötü ingilizcem için üzgünüm. – omid
'remove_idx' işlevini ve kullanıcı denetimini ekledim, ancak yalnızca sayfa ilk sayfasındaki öğeyi kaldır, eğer yeniden yüklüyse ya da başka bir sayfaya giderse,' led'ler 've 'paketler' geri dönüp menüde kullanılabilir. kötü kullanım kullanıcı kodunu kontrol edebilir miyim, lütfen bana yardımcı olabilir misiniz? – omid
Hem 'remove_idx()' hem de kimlik doğrulama kontrolü libs/web/luasrc/dispatcher.lua' dosyasında olmalıdır, çünkü tüm dizin ağacı yönlendirici web arabirimini açar açmaz oluşturulmuştur. Kullanıcı doğrulama kontrolü, cevabımda gösterdiğim kodun hemen ardından 'dispatch()' rutininde olmalıdır. Bu, dizin ağacının doldurulacağı rutin. – yegorich