Avatar billede cesil Nybegynder
07. oktober 2002 - 11:46 Der er 13 kommentarer og
1 løsning

recursive opslag

Hej Eksperter
Jeg arbejder i asp, men den her hører vist mest til her.

For Each User In Request.Form("project")
1 Set oRs1 = oConn.Execute("SELECT userid FROM NetsitePermissionGroup WHERE groups = " & User)
  do while oRs1.eof=false
    2 Set oRs2 = oConn.Execute("SELECT pageid FROM  webwebpages WHERE parentid = " & pageid)
    if oRs2.eof=false then
      do while oRs2.eof=false
        3 Set oRs3 = oConn.Execute("SELECT pageid FROM webwebpages WHERE parentid = " & oRs2("pageid"))
        if oRs3.eof=false then
        do while oRs3.eof=false
          Set oRs = oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & oRs3("pageid") & "," & oRs1("userid") & "," & User & ")")
            Set oRs = Nothing                oRs3.movenext
            loop
        else
          Set oRs = oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & oRs2("pageid") & "," & oRs1("userid") & "," & User & ")")
          Set oRs = Nothing                end if   
    oRs2.movenext
    loop
  else
    Set oRs = oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & page & "," & oRs1("userid") & "," & User & ")")
    Set oRs = Nothing               
  end if
  oRs1.movenext
  loop
  set oRs1 = nothing
Next

 
Jeg laver et system til at give brugere adgang til at opdaterer sider.
Det skal virke således at hvis brugeren får adgang til en side har han også adgang til undersiderne.
Derfor skal det her rettes til så det henter alle underside + undersidernes undersider og giver rettigheder til disse.

Lidt forklaring til koden:
1 Først vælges de brugere der skal have adgang
2 så finder jeg de sider hvor min side er overside
3 så forsøger jeg at finde undersider til de sider jeg netop har fundet.
Men det er jo ikke nok
for jeg skal jo lave en løkke der bliver ved med at finde siders undersider, indtil der ikke er flere.


Kan i hjælpe
Avatar billede ocp Nybegynder
07. oktober 2002 - 12:06 #1
Noget i denne stil?

For Each User In Request.Form("project")
  Set oRs1 = oConn.Execute("SELECT userid FROM NetsitePermissionGroup WHERE groups = " & User)
  while not oRs1.eof
    RecursePages( "", ors1(0).value, GroupID)
  wend
next

sub RecursePages(PageID, UserID, GroupID)
  dim rs

  set rs = oconn.execute("SELECT pageid FROM webwebpages WHERE parrentid = " & pageid)

  while not rs.eof
   
    oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & PageID & "," & UserID & "," & GroupID & ")")
    RecursePages(rs.oRs2("pageid"), UserID, GroupID)

    rs.movenext
  wend

  rs.close
  set rs = nothing

end sub
Avatar billede cesil Nybegynder
07. oktober 2002 - 13:05 #2
Jo det ser lovende ud, tror jeg!!

Jeg får en:
Either BOF or EOF is True, or the current record has been deleted......osv
i denne linie:
rs.movenext

Her er din kode med mine tilretninger :-)

For Each User In Request.Form("project")
  Set oRs1 = oConn.Execute("SELECT userid FROM NetsitePermissionGroup WHERE groups = " & User)
  while not oRs1.eof
    RecursePages pid, ors1(0).value, user
  oRs1.movenext 
  wend
next
oRs1.close
set oRs1 = nothing
 
sub RecursePages(PageID, UserID, GroupID)
  set rs = oConn.execute("SELECT id FROM webwebpages WHERE pid = " & pageid)
      while not rs.eof
        oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & rs("id") & "," & UserID & "," & GroupID & ")")
        RecursePages rs("id"), UserID, GroupID
      rs.movenext
      wend
end sub
rs.close
set rs = nothing
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:08 #3
Det er grunden til at jeg dim'ede rs inde i funktionen. Den dim har du imidlertid fjernet og dermed er rs blevet en global variabel.
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:09 #4
Den vil nemlig være EOF efter den "kommer tilbage" fra den undeliggende RecursePages().
Avatar billede cesil Nybegynder
07. oktober 2002 - 13:22 #5
Ah okay. Jeg er med. Jamen så virker det jo. Det eneste der ikke er så godt er at det kun er parentid'erne der bliver gemt. Altså den første side bliver ikke gemt.
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:26 #6
Kan du ikke bare starte med pid = null (eller hvad der nu er sat i dine "root"-pages)?
Avatar billede cesil Nybegynder
07. oktober 2002 - 13:29 #7
Det er jo ikke sikkert at det er på root niveau der skal gives rettigheder, men skidt nu med det. Du har hjulpet mig videre og det var det vigtigste.
Tak for hjælpen.
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:34 #8
Kan du ikke bare gøre sådan her?

sub RecursePages(PageID, UserID, GroupID)
  set rs = oConn.execute("SELECT id FROM webwebpages WHERE pid = " & pageid)

        oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & rs("id") & "," & UserID & "," & GroupID & ")")

      while not rs.eof
        RecursePages rs("id"), UserID, GroupID
      rs.movenext
      wend
end sub
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:35 #9
Jeg ævler... SÅDAN her:


sub RecursePages(PageID, UserID, GroupID)
        oConn.Execute("INSERT INTO webwebpagespermissions(pageid,userid,groupid) VALUES (" & pageid & "," & UserID & "," & GroupID & ")")

  set rs = oConn.execute("SELECT id FROM webwebpages WHERE pid = " & pageid)

      while not rs.eof
        RecursePages rs("id"), UserID, GroupID
      rs.movenext
      wend
end sub
Avatar billede cesil Nybegynder
07. oktober 2002 - 13:37 #10
Det har jeg allerede gjort. Insert skal bare lige indenfor while løkken. alle brugerne skal jo med.
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:39 #11
Det kommer de da også. RecursePages bliver jo kaldt hver gang løkken køres.
Avatar billede cesil Nybegynder
07. oktober 2002 - 13:42 #12
Nu er det mig der ævler. Jeg laver min insert udenfor functionen, oppe i løkken med brugere.
Avatar billede ocp Nybegynder
07. oktober 2002 - 13:43 #13
Det behøver du ikke hvis du gør som jeg specificerede i indlægget fra 13:35:40.
Avatar billede cesil Nybegynder
07. oktober 2002 - 14:14 #14
Jamen det har du da helt ret i, igen. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester