Oprettet tir. d. 10. juli 2007 kl. 22:12:07

frydenholm
frydenholm (22.557 point. Point ude: 200)

asp.net 2.0 menu og securitytrimming

Jeg forsøger at få securitytrimming til at virke så min menu, der er opbygget ud fra et sitemap viser menupunkterne afhængig af den påloggede brugers rolle. Jeg har kigget i lignende spørgsmål her på sitet men har ikke kunnet få det til at virke.

Jeg har 2 sitemap filer - en til det "offentlige site" hvor securitytrimming ikke er enabled, og så en admin.sitemap.

Min web.config i roden af sitet har følende:
<roleManager enabled="true" defaultProvider="AccessRoleProvider" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
      <providers>
        <add name="AccessRoleProvider" type="Samples.AccessProviders.AccessRoleProvider, AccessProviders" connectionStringName="AccessFileName" applicationName="RBK" />
      </providers>
    </roleManager>
       
    <siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
      <providers>
        <add name="XmlSiteMapProvider" description="Default SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="false" />
        <add name="AdminXmlSiteMapProvider" description="Admin SiteMap provider." type="System.Web.XmlSiteMapProvider" siteMapFile="admin.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>

Og i admin.sitemap er der bl.a. følgende:
<siteMapNode url="~/admin/default.aspx?id=home" title="Home"  description="Startside" roles="*">
<siteMapNode url="~/admin/default.aspx?id=brugere" title="Brugere"  description="Vælg et underpunkt for at administrere Brugere" roles="admin" >
      <siteMapNode url="~/admin/brugeradm/opretbruger.aspx" title="Opret bruger"  description="Opret en bruger til systemet" roles="admin"/>
    </siteMapNode>
  </siteMapNode>

Jeg har 2 testbrugere - den ene i rollen admin, og den anden i rollen editor. Men begge brugere kan fint se de menupunkterne hvor roles="admin" er angivet.

I mappen admin har jeg også en web.config der indeholder følgende:
<authorization>
    <allow roles="admin,editor"/>
    <deny users="*"/>
</authorization>

Udfra de spørgsmål jeg ellers har fundet om securitytrimming har jeg også prøvet i web.config i roden at tilføje følgende uden held
<location path="~/admin/brugeradm/opretbruger.aspx">
    <system.web>
    <authorization>
      <allow roles="admin"/>
      <deny roles="editor"/>
    </authorization>
    </system.web>
</location>

Sig endelig til hvis der mangler flere informationer.
Selv hvis tricket med location path kan komme til at virke (det kan jo være jeg har glemt en detalje et sted) vil jeg være lidt træt af at proppe ekstra authorization på hver fil under admin for at sortere menupunkterne fra (selvom jeg formoder at det så giver den ekstra grad af sikkerhed at en forkert rolle slet ikke kan loade siden i stedet for kun at skjule menupunktet for en rolle!? Men det at skjule menupunktet er sikkerhed nok i dette tilfælde).

Er det muligt at lave en databinding metode når menuen opbygges, hvor jeg så selv kan tjekke på om brugerens rolle er i listen af roller angivet for menupunktet i admin.sitemap? Hvis ja, er der så en der kan lave et hurtigt C# eksempel?

Skrevet tor. d. 12. juli 2007 kl. 11:54:37| #1

snepnet
snepnet (87.110 point)
Når du angiver sådan her i din konfigurationsfil
<authorization>
    <allow roles="admin,editor"/>
    <deny users="*"/>
</authorization>
medfører det at både admin's og editor'er kan se hvad der ligger i mappen, hvilket medfører at du får vist menupunkterne, så det er som det skal være.
Hvis du slår securitytrimming til skal du ikke begynde at angive noget i dit sitemap - med mindre det går på tværs af det securitytrimming ville gøre.
Så i dit tilfælde - sørg for at editor's ikke har adgang til admin-mappen:
<authorization>
    <allow roles="admin"/>
    <deny users="*"/>
</authorization>

Og fjern rollerne fra dit sitemap:
<siteMapNode url="~/admin/default.aspx?id=home" title="Home"  description="Startside" roles="*">
<siteMapNode url="~/admin/default.aspx?id=brugere" title="Brugere"  description="Vælg et underpunkt for at administrere Brugere" >
      <siteMapNode url="~/admin/brugeradm/opretbruger.aspx" title="Opret bruger"  description="Opret en bruger til systemet" />
    </siteMapNode>
  </siteMapNode>

Og tjah... Så vær sikker på at du er logget ind som det der var planen ;o)

Mvh

Skrevet tor. d. 12. juli 2007 kl. 17:54:00| #2

frydenholm
frydenholm (22.557 point)
Det er nok lidt dårlig navngivning, men både brugere i rollen admin og editor kan logge ind og tilgå sider i admin mappen.
Der er dog forskel på hvilke menupunkter de skal have i "admin-menuen" - rollen editor kan f.eks. oprette og redigere nyheder, mens admin-rollen kan se menupunkter vedr. oprettelse af brugere samt tilknytning af roller.

Så det går ikke at jeg fjerner editor fra "allow roles" - jeg ønsker kun at differentiere på hvilke menupunkter de respektive roller kan se når de er logget ind.

Skrevet fre. d. 13. juli 2007 kl. 12:13:26| #3

snepnet
snepnet (87.110 point)
Hvis du vil udnytte automatiseringen (securityTrimmingEnabled="true") burde du jo strukturere dine sider i foldere der modsvarer dine roller.... Ellers må du bare slå det fra, og skrive det manuelt ind i dit sitemap.
Mvh

Skrevet fre. d. 13. juli 2007 kl. 12:30:27| #4

frydenholm
frydenholm (22.557 point)
Jeg har godt nok overvejet det med undermapperne - og det kan også let tænkes det bliver løsningen. Jeg vil lige prøve at lave et par forsøg med det.

Men jeg synes også jeg har set et eksempel hvor en Menu_Itemdatabinding metode tjekkede på om den påloggede var i en af de roller der var angivet i menupunktet i sitemap - og hvis ikke det var tilfældet blev menupunktet ikke vist.
Men jeg har ikke lige kunnet finde eksemplet - er der en der har sådan et eksempel i C#?

Tak for svar indtil videre Snepnet. Jeg er lidt i tvivl om hvad du mener med at skrive det manuelt ind i sitemap?

Skrevet fre. d. 13. juli 2007 kl. 13:34:06| #5

snepnet
snepnet (87.110 point)
Det er bare som du allerede har gjort (roles="admin" på en sitemapnode).
Der er ikke det store i det du skriver om... Du kan se et eksempel her http://www.joeaudette.com/ (...), men det bliver hurtigt lidt irreterende hvis du kontinuerligt skal rette i koden når du tilføjer brugere - og systemet virker jo for så vidt ok som standard.
Mvh

Skrevet fre. d. 13. juli 2007 kl. 14:21:34| #6

frydenholm
frydenholm (22.557 point)
Jeg har vist nok til at komme videre med en løsning nu - om det bliver løsningen med undermapper eller om jeg sorterer fra med en itemdatabinding ved jeg ikke helt endnu - nu vil jeg prøve at rode lidt begge løsninger og se hvad jeg synes virker bedst til det behov jeg har.

Tak for hjælpen snepnet - smit et svar så får du point.

Skrevet man. d. 16. juli 2007 kl. 11:30:16| #7

snepnet
snepnet (87.110 point)
Et svar kommer her :o)
Held og lykke med det.
Mvh

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

GridView og RowCommand

Oprettet den 22. maj 2012 kl. 17.34
faran giver 30 point for svar | Giv et svar »

Flere betingelser i repeater.

Oprettet den 15. maj 2012 kl. 21.45
fuldstop giver 60 point for svar | Giv et svar »

kombinere code behind og Javascript

Oprettet den 6. maj 2012 kl. 09.02
tjacob giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger