Как ASP реализует иерархическую контроль разрешений? Я полагаю, что эта проблема заставила многих начинающих программистов. Ниже приведен метод использования ASP для реализации иерархического контроля разрешений на основе этой проблемы.
Используйте ASP для реализации иерархического контроля разрешений
Эта статья реализует контроль иерархических разрешений в системе управления бухгалтерским учетом. Программа написана в ASP и JavaScript и работает на сервере Win NT, оснащенном IIS4.0. Это быстро и легко поддерживать.
Уровни разрешения делятся следующим образом:
①. Начальник декана и финансов: невозможно войти, можно найти неограниченные запросы и статистика;
②. Вице -президент: Если вы не можете войти, вы можете запросить и подсчитать учетные записи ответственного департамента;
③. Руководитель департамента: если вы не можете войти, вы можете запросить и подсчитать учетные записи этого отдела;
④. Бухгалтерский учет: Вы можете ввести счета каждого отдела (бухгалтер иногда должен сделать учетные записи нескольких отделов), и вы можете запросить только введенные учетные записи, в которые вы ввели самостоятельно.
Базы данных и задействованные поля следующие
①. База данных и поля JK_USER: ID (серийный номер), BMID (номер отделения), имя пользователя (имя пользователя), PWD (пароль), справа (значение разрешения);
②. База данных BM и поля: ID (серийный номер), BMID (номер отдела);
③, база данных и поля JZPZ: ID (серийный номер), BM (отдел), ZGS (дочерняя компания), XMZ (Project Group), XM (Project), SR (доход), ZC (расходы), SZFX (направление дохода), SZXS (форма доходов),
RQ (Date), JBR (Manager), LRR (Instincer), SZSM (входящий оператор);
④, база данных ZGS и поля: ID (серийный номер), ZGS (дочерняя компания) Имя (имя компании), BMID (номер отдела).
1. Во -первых, проверьте законность идентификации пользователя
Сравните имя пользователя и пароль, представленные пользователем с полями в базе данных JK_USER, чтобы определить его законность. Только юридические пользователи (системный администратор открывает для них учетную запись). У юридических пользователей есть
Существует четыре уровня разрешений, и четыре значения разрешений дают «1», «2», «3» и «4». (Программа опущена).
2. Учет ваучера (управление разрешением уровня)
Функция бухгалтерского учета ваучера специально используется для бухгалтеров и не может использоваться другими. Например, при входе в интерфейс ввода ваучер в качестве неакуртирующего, можно увидеть только кнопку функции «Ваучер на бухгалтерскую Query Accounting», а также другие функции
Кнопка не видно. Введенные ваучеры сначала хранятся во временной таблице, которая называется «бесконечная библиотека ваучеров». Только после запуска функции «Учет ваучера» вы можете ввести библиотеку ваучер в библиотеке «Бесконечная библиотека ваучеров».
Исправлять. Некоторые процедуры следующие:
Кнопки «Сохранить ваучеры», не имеющие обязательства, не отображаются.
if (thispage.firstentered), тогда
Если сеанс ("справа") <> "1", тогда
Button1.hide
Button2.hide
конец, если
…………
'Автоматически заполнять время и оператор
Textbox7.value = Год (дата) и "-" & Month (Date) & "-" & Day (Date)
TextBox9.value = Session ("имя пользователя")
Установить cnn1 = server.createObject ("adodb.connection")
SET RST1 = server.createObject ("adodb.recordset")
cnn1.cursorlocation = 3
cnn1.connectiontimeout = 30
cnn1.open "dsn = jky"
rst1.open "select * from bm", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
Rst1.movefirst
Id = rst1.fields ("id")
делать, пока не rst1.eof
ListBox3.Aditem rst1.fields ("bmname"), cint (rst1.fields ("id")))
"Response.write rst1.fields (" bmname ") & rst1.fields (" id ")
rst1.movenext
петля
конец, если
rst1.close
rst1.open "select zgsname из zgs, где bmid =" & id, cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
rst1.movefirst
делать, пока не rst1.eof
ListBox4.additem cstr (rst1.fields ("zgsname"))))
rst1.movenext
петля
конец, если
rst1.close
cnn1.close
Вызовите Writerst
конец, если
конечная функция
……………………
'Ваучер бухгалтерский учет
sub button2_onclick
смутный
s = listbox1.selectedIndex
Response.write s
Конец суб
Sub Listbox3_onchange
Dim Id, я
i = listbox4.getCount ()
делать, пока я> -1
Звоните ListBox4.RemoveItem (i)
i = I-1
петля
id = listbox3.getValue (listbox3.selectedIndex)
Установить cnn2 = server.createObject ("adodb.connection")
SET RST2 = server.createObject ("adodb.recordset")
CNN2.cursorlocation = 3
CNN2.connectionTimeout = 30
cnn2.open "dsn = jky"
rst2.open "select zgsname из zgs, где bmid =" & id, cnn2,1,1, adcmdtext
Если rst2.recordCount> 0, тогда
RST2.MoveFirst
делать, пока не rst2.eof
ListBox4.additem cstr (rst2.fields ("zgsname")))
rst2.movenext
петля
конец, если
rst2.close
CNN2.close
Конец суб
sub button2_onclick
Установить cnn5 = server.createObject ("adodb.connection")
CNN5.cursorlocation = 3
CNN5.ConnectionTimeout = 30
cnn5.open "dsn = jky"
CNN5.execute "INSERT в JZPZ (BM, ZGS, XMZ, XM, SR, ZC, SZFX, SZXS, RQ, JBR, LRR, SZSM) SELECT BM, ZGS, XMZ, XM, SR, ZC, SZFX, SZXS, RQ, JBR, JBR
LRR, SZSM из WJZPZ, где lrr = "" & session ("имя пользователя") & "" "
cnn5.execute "Удалить из wjzpz, где lrr =" "& session (" username ") &" ""
Конец суб
3. Запрос данных (управление разрешением уровня)
Запрос с полями учетных данных в качестве условия. Перед тем перед критериями выбора для «√», где необходимо выбрать условие «отдел» (программа автоматически добавлена), а содержание отдела автоматически основано на разрешениях пользователя.
Вызовите соответствующее значение из базы данных, и контент филиала будет автоматически скорректирован в соответствии с отделом, к которому оно принадлежит. Некоторые процедуры следующие:
…………………
'Введите соответствующий интерфейс запроса в соответствии со значением разрешения
…………………
Функция thispage_onenter ()
Установить cnn1 = server.createObject ("adodb.connection")
SET RST1 = server.createObject ("adodb.recordset")
cnn1.cursorlocation = 3
cnn1.connectiontimeout = 30
cnn1.open "dsn = jky"
Выберите сеанс корпуса ("Tright")
Дело "3" "вице -президент
rst1.open "select bm.bmname из jk_user, bm, где jk_user.bmid = bm.id и jk_user.username =" "& session (" имя пользователя ")
& "" ", CNN1,1, ADCMDTEXT
Если rst1.recordcount> 0, то
Rst1.movefirst
делать, пока не rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
петля
конец, если
rst1.close
rst1.open "select zgsname из zgs", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
rst1.movefirst
делать, пока не rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))))
rst1.movenext
петля
конец, если
rst1.close
cnn1.close
Facebox1.setchecked (true)
Дело "2" Менеджер отдела
Listbox1.additem Session ("BM")
rst1.open "select zgsname из zgs, где bmid =" & session ("bmid"), cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
rst1.movefirst
делать, пока не rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))))
rst1.movenext
петля
конец, если
rst1.close
cnn1.close
Facebox1.setchecked (true)
«Флакторный ящик1.0
Дело "1" "бухгалтер
rst1.open "select bmname из bm", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
Rst1.movefirst
делать, пока не rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
петля
конец, если
rst1.close
rst1.open "select zgsname из zgs", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
rst1.movefirst
делать, пока не rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))))
rst1.movenext
петля
конец, если
rst1.close
cnn1.close
Дело "4" Дин
rst1.open "select bmname из bm", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
Rst1.movefirst
делать, пока не rst1.eof
Listbox1.additem cstr (rst1.fields ("bmname")))
rst1.movenext
петля
конец, если
rst1.close
rst1.open "select zgsname из zgs", cnn1,1,1, adcmdtext
Если rst1.recordcount> 0, то
rst1.movefirst
делать, пока не rst1.eof
Listbox2.additem cstr (rst1.fields ("zgsname"))))
rst1.movenext
петля
конец, если
rst1.close
cnn1.close
конец выбора
конец, если
…………
конечная функция
'Запрос учетных данных в соответствии с разрешениями
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) = fackbox1.getChecked ()
Если BM (0), то
bm (1) = listbox1.getText (listbox1.selectedIndex)
str = "и bm =" "& bm (1) &" ""
конец, если
zgs (0) = fackbox2.getChecked ()
Если zgs (0), то
zgs (1) = listbox2.getText (listbox2.selectedIndex)
str = str & "и zgs =" & zgs (1) & "" "
конец, если
xmz (0) = fackbox3.getChecked ()
Если XMZ (0), то
xmz (1) = trim (txtxmz.value)
str = str & "и xmz like"%"& xmz (1) и"%""
конец, если
xm (0) = fackbox4.getChecked ()
Если XM (0), то
XM (1) = TRIM (TZTXM.Value)
str = str & "и xm like"%"& xm (1) и"%""
конец, если
szfx (0) = fackbox5.getChecked ()
Если szfx (0), то
szfx (1) = listbox3.getText (listbox3.selectedIndex)
str = str & "и szfx =" "& szfx (1) &" ""
конец, если
szxs (0) = fackbox6.getChecked ()
Если szxs (0), то
szxs (1) = listbox4.getText (listbox4.selectedIndex)
str = str & "и szxs =" "& szxs (1) &" ""
конец, если
jbr (0) = fackbox8.getChecked ()
Если jbr (0), то
jbr (1) = trim (txtjbr.value)
str = str & "и jbr like"%"& jbr (1) и"%""
конец, если
Установить cnn2 = server.createObject ("adodb.connection")
SET RST2 = server.createObject ("adodb.recordset")
CNN2.cursorlocation = 3
CNN2.connectionTimeout = 30
cnn2.open "dsn = jky"
Response.write "<table border =" 1 "cellpadding = 0 cellspacing = 0 width =" 650 "высота =" 33 ">"
Response.write "<tr>"
Response.write "<td width =" 100%"colspan =" 6 "height =" 44 "align =" middle "bgcolor = lightblue>"
Response.write "<p align =" center "> <b> <font color ="#000084 "> Список ваучеров бухгалтерского учета"
Response.write "</font> </b> </p> </td> </tr>"
Response.write "<tr>"
Response.write "<td width =" 15%"bgcolor = lightsteelblue>"
Response.write "Департамент </td>"
Response.write "<td width =" 20%"bgcolor = lightsteelblue>"
Response.write "Дочерние компании </td>"
Response.write "<td width =" 15%"bgcolor = lightsteelblue>"
Response.write "Project Team </td>"
Response.write "<td width =" 15%"bgcolor = lightsteelblue>"
Response.write "Имя проекта/номер контракта </td>"
Response.write "<td width =" 15%"bgcolor = lightsteelblue>"
Ответ. Написание «Сумма выручки (10 000 юаней) </td>»
Response.write "<td width =" 15%"bgcolor = lightsteelblue>"
Ответ. Написание "Сумма рамки (10 000 юаней) </td> </tr>"
Если сеанс ("Tright") = "1" Тогда
"Response.write" aaaaaaaaaa "
rst2.open "select * from jzpz, где id> 0 и lrr =" "& session (" username ") &" "& str, cnn2,1,1, adcmdtext
еще
"Response.write" fffffffffffffff "
rst2.open "select * from jzpz, где id> 0" & str, cnn2,1,1, adcmdtext
конец, если
Если rst2.recordCount> 0, тогда
RST2.MoveFirst
RST2.PAGESIZE = 20
rst2.absolutePage = 1
i = 0
Делайте, пока не RST2.EOF и I <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
петля
конец, если
Response.write "</table>"
Response.write "</div>"
J = RST2.PageCount
Response.write "<p align = center> <b> Общее количество страниц:"
для i = 1 до j
Response.write "<a href =" fmjzpzck1.asp? Id = "& i &" "target =" _ Blank ">" & I & "</a>" & "" "
Если j mod 10 = 0, тогда
Response.write "<br>"
конец, если
следующий
Response.write "</b> </p>"
rst2.close
CNN2.close
…………
Конец суб
При применении вышеуказанных программ пользовательские запросы могут быть реализованы в соответствии с разрешениями пользователя и в соответствии с требованиями пользователя. Система работает и проходит на Win NT, IIS4.0, Win98 и PWS.
Вы узнали, как реализовать иерархическое контроль разрешений в ASP? Если есть что -то неясное, пожалуйста, проконсультируйтесь с редактором ошибки, и мы ответим как можно скорее.