Como o ASP implementa o controle de permissão hierárquica? Acredito que esse problema tenha percorrido muitos programadores iniciantes. A seguir, é apresentado o método de usar o ASP para implementar o controle hierárquico de permissão com base nesse problema.
Use ASP para implementar o controle de permissão hierárquica
Este artigo implementa o controle de permissões hierárquicas em um sistema de gerenciamento contábil. O programa foi escrito no ASP e JavaScript e é executado em um servidor NT NT equipado com o IIS4.0. É rápido e fácil de manter.
Os níveis de permissão são divididos da seguinte forma:
①. Dean e Chefe da Seção de Finanças: Não é possível entrar, consultas e estatísticas ilimitadas podem ser encontradas;
②. Vice -presidente: se você não puder entrar, poderá consultar e contar as contas do departamento responsável;
③. Líder do departamento: Se você não puder entrar, poderá consultar e contar as contas deste departamento;
④. Contabilidade: você pode inserir as contas de cada departamento (um contador às vezes precisa fazer contas de vários departamentos) e você pode consultar e contar apenas as contas que você inseriu por si mesmo.
Os bancos de dados e campos envolvidos são os seguintes
①. JK_USER DATABASE E CAMPOS: ID (número de série), BMID (número do departamento), nome de usuário (nome de usuário), PWD (senha), direita (valor da permissão);
②. Banco de dados BM e campos: ID (número de série), BMID (número do departamento);
③, JZPZ Database and Fields: ID (número de série), BM (Departamento), ZGS (Subsidiária), XMZ (Grupo de Projeto), XM (Projeto), SR (Receita), ZC (Despesas), SZFX (Direção da Receita), SZXS (Formulário de Receita),
RQ (Data), JBR (gerente), LRR (entrada), SZSM (declaração de entrada);
④, banco de dados ZGS e campos: ID (número de série), Nome do ZGS (Subsidiária) (nome da empresa), BMID (número do departamento).
1. Primeiro, verifique a legalidade da identidade do usuário
Compare o nome de usuário e a senha enviados pelo usuário com os campos no banco de dados JK_USER para determinar sua legalidade. Somente usuários legais (o administrador do sistema abre uma conta para eles) pode entrar. Usuários legais têm
Existem quatro níveis de permissão e quatro valores de permissão são dados a "1", "2", "3" e "4". (Programa omitido).
2. Contabilidade do voucher (controle de permissão de nível)
A função contábil do voucher é usada especialmente para contadores e não pode ser usada por outras pessoas. Por exemplo, ao inserir a interface de entrada do voucher como um botão de função "apenas o cupote de contabilidade" pode ser visto e outras funções
O botão não é visível. Os vouchers inseridos são armazenados pela primeira vez em uma tabela temporária, que é chamada de "biblioteca de voucher não contabilizada". Somente após a execução da função "Contabilidade de vouchers", você pode inserir a biblioteca de vouchers na biblioteca "não contabilizada da biblioteca de vouchers".
Rever. Alguns procedimentos são os seguintes:
'Pessoal não contábil entra, os botões de função "contabilidade de voucher" e "salvar vouchers não documentados" não exibem
if (thispage.firstented) então
Se sessão ("Right") <> "1" então
Button1.hide
Button2.Hide
final se
…………
'Preencha automaticamente o tempo e o operador
Textbox7.value = ano (data) & "-" & mês (data) & "-" e dia (data)
TextBox9.Value = Session ("Nome de usuário")
set cnn1 = server.createObject ("adodb.connection")
set rst1 = server.createObject ("adodb.recordset")
cnn1.cursorLocation = 3
CNN1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
rst1.open "Select * de BM", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
Rst1.movefirst
Id = rst1.fields ("id")
faça enquanto não é rst1.eof
Listbox3.additem rst1.fields ("bmname"), cint (rst1.fields ("id"))
"Response.write rst1.fields (" bmname ") e rst1.fields (" id ")
rst1.movenext
laço
final se
rst1.close
rst1.open "Selecione ZGSName de ZGs onde Bmid =" & ID, CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
rst1.movefirst
faça enquanto não é rst1.eof
Listbox4.additem cstr (rst1.fields ("zgsname")))
rst1.movenext
laço
final se
rst1.close
CNN1.CLOSE
Ligue para o Writerst
final se
Função final
……………………
'Contabilidade de vouchers
SUB BOTTOLL2_ONCLICK
dim s
s = listbox1.SelectedIndex
Response.write s
final sub
SUB LISTBOX3_ONCHANGE
Dim id, i
i = listbox4.getCount ()
Faça enquanto eu> -1
Ligue para ListBox4.removeItem (i)
i = i-1
laço
id = listbox3.getValue (listbox3.SelectedIndex)
set cnn2 = server.createObject ("adodb.connection")
set rst2 = server.createObject ("adodb.recordset")
cnn2.cursorlocation = 3
CNN2.ConnectionTimeout = 30
cnn2.Open "dsn = jky"
rst2.Open "Selecione ZGSName de ZGs onde Bmid =" & ID, CNN2,1,1, adcmdText
Se rst2.RecordCount> 0 então
RST2.MoveFirst
faça enquanto não é rst2.eof
Listbox4.additem cstr (rst2.fields ("zgsname")))
rst2.movenext
laço
final se
rst2.close
CNN2.Close
final sub
SUB BOTTOLL2_ONCLICK
set cnn5 = server.createObject ("adodb.connection")
cnn5.cursorlocation = 3
cnn5.ConnectionTimeout = 30
cnn5.Open "dsn = jky"
cnn5.Execute "insert into jzpz(bm,zgs,xmz,xm,sr,zc,szfx,szxs,rq,jbr,lrr,szsm) select bm,zgs,xmz,xm,sr,zc,szfx,szxs,rq,jbr,
lrr, szsm de wjzpz onde lrr = "" & session ("nome de usuário") e "" "
cnn5.Execute "Exclua de wjzpz onde lrr =" "& session (" nome de usuário ") e" ""
final sub
3. Consulta de dados (controle de permissão de nível)
Consulta com os campos das credenciais como condição. Há uma caixa antes dos critérios de seleção para "√", onde a condição do "departamento" deve ser selecionada (o programa é adicionado automaticamente) e o conteúdo do departamento é automaticamente baseado nas permissões do usuário.
Ligue para o valor correspondente do banco de dados e o conteúdo da filial será ajustado automaticamente de acordo com o departamento ao qual ele pertence. Alguns procedimentos são os seguintes:
…………………
'Digite a interface de consulta correspondente de acordo com o valor da permissão
…………………
função thispage_onenter ()
set cnn1 = server.createObject ("adodb.connection")
set rst1 = server.createObject ("adodb.recordset")
cnn1.cursorLocation = 3
CNN1.ConnectionTimeout = 30
cnn1.open "dsn = jky"
Selecione Sessão de Caso ("Tright")
caso "3" "vice -presidente
rst1.open "Selecione bm.bmname de jk_user, bm onde jk_user.bmid = bm.id e jk_user.username =" "& session (" nome de usuário ")
& "" ", CNN1,1, adcmdText
Se rst1.recordCount> 0 então
Rst1.movefirst
faça enquanto não é rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
laço
final se
rst1.close
rst1.open "Selecione ZGSName de ZGS", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
rst1.movefirst
faça enquanto não é rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname")))
rst1.movenext
laço
final se
rst1.close
CNN1.CLOSE
Caixa de seleção1.setchecked (true)
Caso "2" Gerente de departamento
ListBox1.additem Sessão ("BM")
rst1.open "Selecione ZGSName de ZGS onde Bmid =" & session ("BMID"), CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
rst1.movefirst
faça enquanto não é rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname")))
rst1.movenext
laço
final se
rst1.close
CNN1.CLOSE
Caixa de seleção1.setchecked (true)
“Caixa de seleção1.0
Caso "1" "Contador
rst1.open "Selecione BMName de BM", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
Rst1.movefirst
faça enquanto não é rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
laço
final se
rst1.close
rst1.open "Selecione ZGSName de ZGS", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
rst1.movefirst
faça enquanto não é rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname")))
rst1.movenext
laço
final se
rst1.close
CNN1.CLOSE
Caso "4" Dean
rst1.open "Selecione BMName de BM", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
Rst1.movefirst
faça enquanto não é rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
laço
final se
rst1.close
rst1.open "Selecione ZGSName de ZGS", CNN1,1,1, adcmdText
Se rst1.recordCount> 0 então
rst1.movefirst
faça enquanto não é rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname")))
rst1.movenext
laço
final se
rst1.close
CNN1.CLOSE
final Selecione
final se
…………
Função final
'Credenciais de consulta de acordo com as permissões
Sub Button1_OnClick
Dim RST2, CNN2, STR, i
dim bm (1), zgs (1), xmz (1), xm (1), szfx (1), szxs (1), rq (2), jbr (1)
bm (0) = caixa de seleção1.getChecked ()
Se BM (0) então
bm (1) = listbox1.getText (listbox1.lectectedIndex)
str = "e bm =" "& bm (1) e" ""
final se
zgs (0) = Checkbox2.getChecked ()
Se zgs (0) então
zgs (1) = listbox2.getText (listbox2.lectectedIndex)
str = str & "e zgs =" & zgs (1) & "" "
final se
xmz (0) = Checkbox3.getChecked ()
Se xmz (0) então
xmz (1) = Trim (txtxmz.value)
str = str & "e xmz como"%"e xmz (1) e"%""
final se
xm (0) = Checkbox4.getChecked ()
Se xm (0) então
XM (1) = TRIM (TZTXM.Value)
str = str & "e xm como"%"e xm (1) e"%""
final se
szfx (0) = caixa de seleção.getChecked ()
Se szfx (0) então
szfx (1) = listbox3.getText (listbox3.SelectedIndex)
str = str & "e szfx =" "& szfx (1) &" ""
final se
szxs (0) = caixa de seleção 6.getChecked ()
Se szxs (0) então
szxs (1) = listbox4.getText (listbox4.SelectedIndex)
str = str & "e szxs =" "& szxs (1) &" ""
final se
jbr (0) = caixa de seleção8.getChecked ()
Se JBR (0) então
JBR (1) = TRIM (TXTJBR.VALUE)
str = str & "e jbr como"%"e jbr (1) e"%""
final se
set cnn2 = server.createObject ("adodb.connection")
set rst2 = server.createObject ("adodb.recordset")
cnn2.cursorlocation = 3
CNN2.ConnectionTimeout = 30
cnn2.Open "dsn = jky"
Response.write "<tabela border =" 1 "CellPadding = 0 CellSpacacing = 0 width =" 650 "Height =" 33 ">"
Response.Write "<tr>"
Response.write "<td width =" 100%"colspan =" 6 "altura =" 44 "align =" meio "bgcolor = lightblue>"
Response.Write "<P align =" Center "> <b> <font color ="#000084 "> Lista de comprovantes contábeis"
Response.Write "</font> </b> </p> </td> </tr>"
Response.Write "<tr>"
Response.Write "<td width =" 15%"bgcolor = Lightsteelblue>"
Response.Write "Departamento </td>"
Response.Write "<td width =" 20%"bgcolor = Lightsteelblue>"
Response.Write "Subsidiárias </td>"
Response.Write "<td width =" 15%"bgcolor = Lightsteelblue>"
Response.Write "Project Team </td>"
Response.Write "<td width =" 15%"bgcolor = Lightsteelblue>"
Response.Write "Nome do projeto/número do contrato </td>"
Response.Write "<td width =" 15%"bgcolor = Lightsteelblue>"
Response.Write "Valor da receita (10.000 yuan) </td>"
Response.Write "<td width =" 15%"bgcolor = Lightsteelblue>"
Response.Write "Valor da expansão (10.000 yuan) </td> </tr>"
Se sessão ("TRIGHT") = "1" então
"Response.write" aaaaaaaaa "
rst2.Open "Selecione * de jzpz onde id> 0 e lrr =" "& session (" nome de usuário ") e" "" & str, cnn2,1,1, adcmdtext
outro
"Response.write" ffffffffffffff "
rst2.Open "Select * de jzpz onde id> 0" & str, cnn2,1,1, adcmdtext
final se
Se rst2.RecordCount> 0 então
RST2.MoveFirst
rst2.Pagesize = 20
rst2.absolutePage = 1
i = 0
Faça enquanto não é rst2.eof e eu <rst2.Pagesize
Response.Write "<tr>"
Response.Write "<td width =" 15%"bgcolor = Lightgrey>" & rst2.fields ("BM") & "</td>"
Response.Write "<td width =" 15%"bgcolor = Lightgrey>" & rst2.fields ("ZGS") & "</td>"
Response.Write "<td width =" 15%"bgcolor = Lightgrey>" & rst2.fields ("xmz") & "</td>"
Response.Write "<td width =" 15%"bgcolor = Lightgrey> <a href =" fmjz1.asp? Id = "& rst2.fields (" id ") &" "
Target = "_ Blank"> "& rst2.fields (" xm ") &" </a> </td> "
Response.Write "<td width =" 5%"bgcolor = Lightgrey>" & rst2.fields ("sr") & "</td>"
Response.Write "<td width =" 5%"bgcolor = Lightgrey>" & rst2.fields ("zc") & "</td>"
Response.Write "</tr>"
i = i+1
rst2.movenext
laço
final se
Response.Write "</ tabela>"
Response.Write "</div>"
j = rst2.pagecount
Response.Write "<P align = Center> <b> Número total de páginas:"
para i = 1 a j
Response.write "<a href =" fmjzpzck1.asp? Id = "& i &" "Target =" _ Blank ">" & i & "</a>" & ""
Se j mod 10 = 0 então
Response.Write "<br>"
final se
próximo
Response.Write "</b> </p>"
rst2.close
CNN2.Close
…………
final sub
Ao aplicar os programas acima, as consultas personalizadas podem ser implementadas de acordo com as permissões do usuário e de acordo com os requisitos do usuário. O sistema é executado e passa no Win NT, IIS4.0, Win98 e PWS.
Você aprendeu a implementar o controle de permissão hierárquica no ASP? Se ainda houver algo não claro, consulte o editor do bug e responderemos o mais rápido possível.