ASP는 계층 적 권한 제어를 어떻게 구현합니까? 나는이 문제가 많은 초보자 프로그래머들을 막았다 고 생각합니다. 다음은 ASP를 사용 하여이 문제를 기반으로 계층 적 권한 제어를 구현하는 방법입니다.
ASP를 사용하여 계층 적 권한 제어를 구현하십시오
이 기사는 회계 관리 시스템에서 계층 적 권한의 제어를 구현합니다. 이 프로그램은 ASP 및 JavaScript로 작성되었으며 IIS4.0이 장착 된 Win NT 서버에서 실행됩니다. 빠르고 유지하기가 쉽습니다.
권한 수준은 다음과 같이 나뉩니다.
①. Dean and Finance Section Chief : 입력 할 수 없으며 무제한 문의 및 통계를 찾을 수 있습니다.
②. 부사장 : 입력 할 수없는 경우 담당 부서의 계정을 쿼리하고 계산할 수 있습니다.
③. 부서 리더 : 입력 할 수없는 경우이 부서의 계정을 쿼리하고 계산할 수 있습니다.
④. 회계 : 각 부서의 계정을 입력 할 수 있으며 (회계사는 때때로 여러 부서의 계정을 작성해야 함) 직접 입력 한 계정 만 쿼리하고 계산할 수 있습니다.
관련된 데이터베이스 및 필드는 다음과 같습니다
①. JK_USER 데이터베이스 및 필드 : ID (일련 번호), BMID (부서 번호), 사용자 이름 (사용자 이름), PWD (비밀번호), 오른쪽 (허가 값);
②. BM 데이터베이스 및 필드 : ID (일련 번호), BMID (부서 번호);
③, JZPZ 데이터베이스 및 필드 : ID (일련 번호), BM (부서), ZGS (자회사), XMZ (프로젝트 그룹), XM (프로젝트), SR (수익), ZC (지출), SZFX (수익 방향), SZXS (수익 형식),
RQ (날짜), JBR (관리자), LRR (Inputer), SZSM (수신 명세서);
④, ZGS 데이터베이스 및 필드 : ID (일련 번호), ZGS (자회사) 이름 (회사 이름), BMID (부서 번호).
1. 먼저, 사용자 신원 합법성을 확인하십시오
사용자가 제출 한 사용자 이름과 비밀번호를 데이터베이스 jk_user의 필드와 비교하여 합법성을 결정하십시오. 법적 사용자 (시스템 관리자 만 계정을 엽니 다) 만 입력 할 수 있습니다. 합법적 인 사용자가 있습니다
4 개의 권한 수준이 있으며 4 개의 권한 값은 "1", "2", "3"및 "4"에 제공됩니다. (프로그램 생략).
2. 바우처 회계 (레벨 권한 제어)
바우처 회계 기능은 회계사에게 특별히 사용되며 다른 사람이 사용할 수 없습니다. 예를 들어, 바우처 항목 인터페이스를 비과수자로 입력 할 때 "쿼리 계정 바우처"기능 버튼 만 볼 수 있으며 기타 기능 만 볼 수 있습니다.
버튼이 표시되지 않습니다. 입력 된 바우처는 먼저 임시 테이블에 저장되며 "비 계정 바우처 라이브러리"라고합니다. "바우처 회계"기능을 실행 한 후에 만 "비 계정 바우처 라이브러리"바우처에서 바우처 라이브러리를 입력 할 수 있습니다.
개정하다. 일부 절차는 다음과 같습니다.
'비 계정 직원 입력, "바우처 회계"및 "문서화되지 않은 바우처 저장"기능 버튼이 표시되지 않습니다.
if (thispage.firstentered) 그러면
IF SESSION ( "RIGHT") <> "1"라는 경우
button1.Hide
button2.hide
끝 If
…………
'자동으로 시간과 운영자를 채우십시오
Textbox7.value = 연도 (날짜) & "-"& month (날짜) & "-"& day (날짜)
textbox9.Value = 세션 ( "사용자 이름")
set cnn1 = server.createobject ( "adodb.connection")
set rst1 = server.createobject ( "adodb.recordset")
CNN1.cursorLocation = 3
CNN1.connectionTimeout = 30
CNN1. "DSN = JKY"
RST1. "BM에서"선택 * ", CNN1,1,1, AdcmdText
rst1.recordCount> 0 인 경우
rst1.MoveFirst
id = rst1.fields ( "id")
rst1.eof가 아닙니다
listbox3.additem rst1.fields ( "bmname"), cint (rst1.fields ( "id"))
"응답. rst1.fields ("bmname ") & rst1.fields ("id ")
rst1.movenext
고리
끝 If
rst1.close
RST1. "ZGS에서 ZgsName을 선택하십시오. 여기서 bmid ="& id, cnn1,1,1, adcmdtext
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox4.additem cstr (rst1.fields ( "zgsname"))
rst1.movenext
고리
끝 If
rst1.close
CNN1.Close
부탁자에게 전화하십시오
끝 If
엔드 기능
……………………
'바우처 회계
하위 버튼 2_onclick
희미한 s
s = listbox1.selectedIndex
응답
종료 서브
서브 Listbox3_onChange
DIM ID, i
i = listbox4.getCount ()
i> -1 동안해야합니다
Call 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 "bmid ="& id, cnn2,1,1, adcmdtext에서 zgs에서 zgsname을 선택하십시오
rst2.recordCount> 0 인 경우
rst2.movefirst
rst2.eof가 아닙니다
listbox4.additem cstr (rst2.fields ( "zgsname"))
rst2.movenext
고리
끝 If
rst2.close
cnn2.close
종료 서브
하위 버튼 2_onclick
cnn5 = server.createobject를 설정하십시오 ( "adodb.connection")
CNN5.CursorLocation = 3
CNN5.ConnectionTimeout = 30
CNN5. OPEN "DSN = JKY"
CNN5. EXECUTE "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, wjzpz의 szsm where lrr = "& session ("username ") &" "" "
cnn5.Execute "lrr =" "& session ("username ") &" "" "" "" "삭제" "" "
종료 서브
3. 데이터 쿼리 (레벨 권한 제어)
자격 증명 필드를 조건으로 쿼리하십시오. "√"에 대한 선택 기준 이전에 "부서"조건을 선택 해야하는 상자가 있으며 (프로그램은 자동으로 추가 됨) 부서 컨텐츠는 사용자의 권한을 기반으로 자동입니다.
데이터베이스에서 해당 값을 호출하면 분기 내용이 해당 부서에 따라 자동으로 조정됩니다. 일부 절차는 다음과 같습니다.
…………………
'권한 값에 따라 해당 쿼리 인터페이스를 입력하십시오.
…………………
기능 thispage_onnenter ()
set cnn1 = server.createobject ( "adodb.connection")
set rst1 = server.createobject ( "adodb.recordset")
CNN1.cursorLocation = 3
CNN1.connectionTimeout = 30
CNN1. "DSN = JKY"
사례 세션 선택 ( "Tright")
사례 "3" "부사장
RST1. "jk_user.bmid = bm.id 및 jk_user.username =" "& session ("username ")에서"bm.bmname을 선택하십시오.
& "" ", cnn1,1, adcmdtext
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox1.additem cstr (rst1.fields ( "bmname"))
rst1.movenext
고리
끝 If
rst1.close
RST1. "ZGS에서 ZGSNAME SELECT", CNN1,1,1, ADCMDTEXT
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox2.additem cstr (rst1.fields ( "zgsname"))
rst1.movenext
고리
끝 If
rst1.close
CNN1.Close
checkbox1.setchecked (true)
사례 "2"부서 관리자
Listbox1.additem 세션 ( "BM")
RST1. "ZGS에서 ZgsName을 선택하십시오. 여기서 bmid ="& session ( "bmid"), cnn1,1,1, adcmdtext
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox2.additem cstr (rst1.fields ( "zgsname"))
rst1.movenext
고리
끝 If
rst1.close
CNN1.Close
checkbox1.setchecked (true)
“CheckBox1.0
사례 "1" "회계사
RST1. "BM에서 BMNAME 선택", CNN1,1,1, ADCMDText
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox1.additem cstr (rst1.fields ( "bmname"))
rst1.movenext
고리
끝 If
rst1.close
RST1. "ZGS에서 ZGSNAME SELECT", CNN1,1,1, ADCMDTEXT
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox2.additem cstr (rst1.fields ( "zgsname"))
rst1.movenext
고리
끝 If
rst1.close
CNN1.Close
사례 "4"딘
RST1. "BM에서 BMNAME 선택", CNN1,1,1, ADCMDText
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox1.additem cstr (rst1.fields ( "bmname"))
rst1.movenext
고리
끝 If
rst1.close
RST1. "ZGS에서 ZGSNAME SELECT", CNN1,1,1, ADCMDTEXT
rst1.recordCount> 0 인 경우
rst1.MoveFirst
rst1.eof가 아닙니다
listbox2.additem cstr (rst1.fields ( "zgsname"))
rst1.movenext
고리
끝 If
rst1.close
CNN1.Close
종료 선택
끝 If
…………
엔드 기능
'권한에 따른 쿼리 자격 증명
하위 버튼 1_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) = checkbox1.getChecked ()
BM (0)이면
bm (1) = listbox1.gettext (listbox1.selectedIndex)
str = "및 bm =" "& bm (1) &" "" "
끝 If
zgs (0) = checkbox2.getChecked ()
ZGS (0)라면
zgs (1) = listbox2.gettext (listbox2.selectedIndex)
str = str & "및 zgs ="& zgs (1) & "" ""
끝 If
xmz (0) = checkbox3.getchecked ()
xmz (0)라면
xmz (1) = trim (txtxmz.value)
str = str & "및 xmz는"%"& xmz (1) &"%""
끝 If
xm (0) = checkbox4.getChecked ()
xm (0)이면
xm (1) = trim (tztxm.value)
str = str & "및 xm like"%"& xm (1) &"%""
끝 If
szfx (0) = checkbox5.getChecked ()
SZFX (0)라면
szfx (1) = listbox3.gettext (listbox3.selectedIndex)
str = str & "및 szfx ="& szfx (1) & "" "" "
끝 If
szxs (0) = checkbox6.getChecked ()
SZXS (0)라면
szxs (1) = listbox4.gettext (listbox4.selectedIndex)
str = str & "및 szxs =" "& szxs (1) &" "" "
끝 If
jbr (0) = checkbox8.getChecked ()
JBR (0)이면
jbr (1) = trim (txtjbr.value)
str = str & "및"%"& jbr (1) &"%"와 같은 JBR
끝 If
cnn2 = server.createobject를 설정하십시오 ( "adodb.connection")
set rst2 = server.createobject ( "adodb.recordset")
cnn2.cursorlocation = 3
CNN2.ConnectionTimeout = 30
CNN2. OPEN "DSN = JKY"
응답. "<테이블 테두리 ="1 "CellPadding = 0 CellSpacing = 0 width ="650 "height ="33 ">"
response.write "<tr>"
응답. "<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>"
응답. "<td width ="15%"bgcolor = lightsteelblue>"
응답. "부서 </td>"
response.write "<td width ="20%"bgcolor = lightsteelblue>"
응답. "자회사 </td>"
응답. "<td width ="15%"bgcolor = lightsteelblue>"
응답. "프로젝트 팀 </td>"
응답. "<td width ="15%"bgcolor = lightsteelblue>"
응답. "프로젝트 이름/계약 번호 </td>"
응답. "<td width ="15%"bgcolor = lightsteelblue>"
응답. "수익 금액 (10,000 위안) </td>".
응답. "<td width ="15%"bgcolor = lightsteelblue>"
응답. "소비 금액 (10,000 위안) </td> </tr>"
Session ( "Tright") = "1"인 경우
"응답."aaaaaaaaaa "
rst2.open "jzpz에서 jzpz where id> 0 및 lrr ="& session ( "username") & "" "& str, cnn2,1,1, adcmdtext
또 다른
"응답."fffffffffffffff "
rst2.open "jzpz where id> 0"& str, cnn2,1,1, adcmdtext
끝 If
rst2.recordCount> 0 인 경우
rst2.movefirst
rst2.pagesize = 20
rst2.absolutepage = 1
i = 0
rst2.eof가 아닌 상태에서 수행하십시오
response.write "<tr>"
응답. "<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>"
응답. "<td width ="15%"bgcolor = lightgrey> <a href ="fmjz1.asp? id = "& rst2.fields ("id ") &" "
대상 = "_ 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>"
응답. "</tr>"
i = i+1
rst2.movenext
고리
끝 If
response.write "</table>"
response.write "</div>"
j = rst2.pagecount
response.write "<p align = center> <b> 총 페이지 수 :"
i = 1 ~ j의 경우
응답.
J 모드 10 = 0이면
응답. "<br>"
끝 If
다음
응답. "</b> </p>"
rst2.close
cnn2.close
…………
종료 서브
위의 프로그램을 적용 할 때 사용자의 권한과 사용자의 요구 사항에 따라 사용자 정의 쿼리를 구현할 수 있습니다. 시스템은 Win NT, IIS4.0, Win98 및 PW를 실행하고 통과합니다.
ASP에서 계층 적 권한 제어를 구현하는 방법을 배웠습니까? 여전히 불분명 한 것이 있다면 버그의 편집자와 상담하면 가능한 빨리 답장을 드리겠습니다.