{"id":56,"date":"2012-01-06T13:47:00","date_gmt":"2012-01-06T13:47:00","guid":{"rendered":"http:\/\/tpodolak.com.hostingasp.pl\/blog\/2012\/01\/06\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/"},"modified":"2016-01-31T00:23:51","modified_gmt":"2016-01-31T00:23:51","slug":"silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block","status":"publish","type":"post","link":"https:\/\/tpodolak.com\/blog\/2012\/01\/06\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/","title":{"rendered":"Silverlight &#8211; koncepcja logowania z u\u017cyciem MembershipProviders oraz WCF RIA cz.3 &#8211; Microsoft Enterprise Library Security Block"},"content":{"rendered":"<p>W tym wpisie postaram si\u0119 kr\u00f3tko przedstawi\u0107 blok bezpiecze\u0144stwa (Security Block) z biblioteki Microsoft Enterprise Library.<br \/>\nBiblioteki tej u\u017cyjemy do sprawdzania rol i regu\u0142 dost\u0119pu do funkcji serwisu WCF. Najpierw oczywi\u015bcie musimy pobra\u0107 bibliotek\u0119 Microsoft Enterprise Library, znajduje si\u0119 ona pod tym adresem.<br \/>\nhttp:\/\/www.microsoft.com\/download\/en\/details.aspx?id=15104. Biblioteka ta jest r\u00f3wnie\u017c dost\u0119pna z poziomu NuGeta, jednak\u017ce instalacja poprzez ten plugin dorzuca do projektu tylko dll-ki. W pierwszym przypadku natomiast opr\u00f3cz dll-ek zostaje r\u00f3wnie\u017c zainstalowane bardzo wygodne narz\u0119dzie u\u0142atwiaj\u0105ce konfiguracj\u0119 r\u00f3\u017cnych modu\u0142\u00f3w biblioteki.<br \/>\nMaj\u0105c zainstalowane wszystkie potrzebne komponenty mo\u017cemy przyst\u0105pi\u0107 do dzia\u0142ania. Zacznijmy od zmodyfikowania pliku Web.config, tak aby umo\u017cliwi\u0107 naszemu systemowi korzystanie z r\u00f3l &#8211; a tak w\u0142a\u015bciwie aby umo\u017cliwi\u0107 edycj\u0119, tworzenie, usuwanie oraz przypisywanie r\u00f3l u\u017cytkownikom.W sekcji<\/p>\n<pre lang=\"xml\">\r\n<system.web>\r\n<\/pre>\n<p>dorzucamy nast\u0119puj\u0105ce wpisy<\/p>\n<pre lang=\"xml\">\r\n<roleManager enabled=\"true\" defaultProvider=\"SqlProvider\">\r\n      <providers>\r\n        <clear \/>\r\n        <add connectionStringName=\"aspnetdbConnectionString\" name=\"SqlProvider\"\r\n          type=\"System.Web.Security.SqlRoleProvider\" \/>\r\n      <\/providers>\r\n<\/roleManager>\r\n<\/pre>\n<p>W tym momencie dodali\u015bmy do kolekcji menad\u017cer\u00f3w r\u00f3l (Role managers) nowy provider -nie jest to jednak MembershipProvider lecz RoleProvider, a dok\u0142adniej dostarczony przez framework SqlRoleProvider. Provider ten jest przystosowany do dzia\u0142ania na bazie danych o takiej strukturze, jak baza, kt\u00f3r\u0105 stworzyli\u015bmy w cz\u0119\u015bci pierwszej. Po konfiguracji providera przyszed\u0142 czas na dodanie przyk\u0142adowego u\u017cytkownika oraz przypisanie mu jakiej\u015b roli. Wybieramy opcj\u0119 &#8220;ASP.NET Configuration&#8221; z menu &#8220;Project&#8221;, nast\u0119pnie na stronie na kt\u00f3r\u0105 zostaniemy przeniesieni, przechodzimy na zak\u0142adk\u0119 &#8220;Security&#8221;<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/Configuration.jpg\" rel=\"attachment wp-att-454\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/Configuration.jpg\" alt=\"Configuration\" width=\"442\" class=\"aligncenter size-full wp-image-454\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/Configuration.jpg 442w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/Configuration-136x150.jpg 136w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/Configuration-272x300.jpg 272w\" sizes=\"(max-width: 442px) 100vw, 442px\" \/><\/a><br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintool.jpg\" rel=\"attachment wp-att-451\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintool.jpg\" alt=\"admintool\" width=\"800\" height=\"490\" class=\"aligncenter size-full wp-image-451\" \/><\/a><br \/>\nW kolejnym kroku dodajemy role &#8211; klikamy w &#8220;Create or Manage roles&#8221;,a w stronie, kt\u00f3ra si\u0119 otworzy wpisujemy nazw\u0119 roli np.&#8221;Developer&#8221;. Post\u0119puj\u0105c w podobny spos\u00f3b dodajmy jeszcze role &#8220;Admin&#8221;. Nast\u0119pnie tworzymy u\u017cytkownika &#8211; klikamy w &#8220;Create user&#8221;, a nast\u0119pnie wype\u0142niamy pola podobnie jak na za\u0142\u0105czonym poni\u017cej screenie<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintoolpass.jpg\" rel=\"attachment wp-att-452\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintoolpass.jpg\" alt=\"admintoolpass\" width=\"500\" class=\"aligncenter size-full wp-image-452\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintoolpass.jpg 614w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintoolpass-150x127.jpg 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/admintoolpass-300x254.jpg 300w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/a><br \/>\nMaj\u0105c stworzonego przyk\u0142adowego u\u017cytkownika mo\u017cemy przyst\u0105pi\u0107 do ograniczenia dost\u0119pu do niekt\u00f3rych funkcji naszego serwisu. W tym celu, po pierwsze modyfikujemy funkcj\u0119 logowania.<\/p>\n<pre lang=\"csharp\">\r\n protected UserDTO ValidateCredentials(string name, string password, string customData, out string userData)\r\n {\r\n     UserDTO user = null;\r\n     userData = null;\r\n     if (Membership.Providers[customData].ValidateUser(name, password))\r\n     {\r\n         userData = name;\r\n         user = new UserDTO { DisplayName = name, Name = name, Email = name, Roles = Roles.GetRolesForUser(name) };\r\n     }\r\n     \r\n     if (user != null) userData = name;\r\n     \r\n     return user;\r\n }\r\n<\/pre>\n<p>Jak wida\u0107, przy tworzeniu u\u017cytkownika dodatkowo pobieramy z bazy danych jego wszystkie role. Statyczna funkcja <span style=\"font-style: italic;\">GetRolesForUser<\/span> pobiera role przy pomocy domy\u015blnego RoleProvidera.<br \/>\nDodajmy teraz do naszego <span style=\"font-style: italic;\">DataAccesService-u<\/span> dwie funkcje.<\/p>\n<ul>\n<li>OnlyAdminCanDownloadThis<\/li>\n<li>DevelopersCanDownloadThis<\/li>\n<\/ul>\n<p>Dane pobierane przez pierwsz\u0105 funkcj\u0119 mog\u0105 by\u0107 odczytane jedynie przez u\u017cytkownik\u00f3w, kt\u00f3rzy s\u0105 administratorami systemu. Natomiast dane z funkcji drugiej mog\u0105 by\u0107 odczytane przez developer\u00f3w (oczywi\u015bcie admin r\u00f3wnie\u017c mo\u017ce pobra\u0107 te dane). Zastan\u00f3wmy si\u0119 teraz w jaki spos\u00f3b sprawdzi\u0107 czy dany u\u017cytkownik ma dost\u0119p do danych. Mo\u017cemy sprawdza\u0107 role r\u0119cznie (niewygodne), u\u017cy\u0107 znanego z ASP.NET atrybutu PrincipalPermission (ma\u0142o elastyczne) lub skorzysta\u0107 z Microsoft Enterprise Library (ca\u0142kiem dobra opcja). Security Block z biblioteki Microsoft Enterprise Library ma t\u0119 przewag\u0119 nad wcze\u015bniej wspomnianymi rozwi\u0105zaniami, \u017ce wprowadza on tzw. regu\u0142y(Rules). Dzi\u0119ki nim mo\u017cemy w \u0142atwy spos\u00f3b zdefiniowa\u0107 warunki jakie musi spe\u0142ni\u0107 u\u017cytkownik aby zezwoli\u0107 mu na dost\u0119p w jakie\u015b miejsce systemu. Skonfigurujmy zatem prost\u0105 regu\u0142\u0119 &#8211; regu\u0142\u0105 ta pozwoli na dost\u0119p do danych jedynie tym u\u017cytkownikom,kt\u00f3rzy maj\u0105 prawo administratora. Klikamy PPM na plik Web.config i wybieramy z niego opcj\u0119 &#8220;Edit Enterprise Library V5 Configuration&#8221; &#8211; opcja ta zosta\u0142a dodana po instalacji biblioteki Microsoft Enterprise Library.<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/editenterprise.png\" rel=\"attachment wp-att-455\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/editenterprise.png\" alt=\"editenterprise\" width=\"374\" class=\"aligncenter size-full wp-image-455\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/editenterprise.png 374w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/editenterprise-150x70.png 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/editenterprise-300x140.png 300w\" sizes=\"(max-width: 374px) 100vw, 374px\" \/><\/a><br \/>\nW oknie kt\u00f3re si\u0119 otworzy wybieramy &#8220;Add Security Settings&#8221; z menu &#8220;Blocks&#8221;.<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/addsecurity.jpg\" rel=\"attachment wp-att-450\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/addsecurity.jpg\" alt=\"addsecurity\" width=\"800\" class=\"aligncenter size-full wp-image-450\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/addsecurity.jpg 1023w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/addsecurity-150x78.jpg 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/addsecurity-300x155.jpg 300w\" sizes=\"(max-width: 1023px) 100vw, 1023px\" \/><\/a><br \/>\nW g\u0142\u00f3wnym oknie aplikacji pojawi si\u0119 nowy element &#8211; &#8220;Security Settings&#8221;. Klikamy na znak &#8220;+&#8221; obok &#8220;Authorization Providers&#8221;, nast\u0119pnie z rozwini\u0119tego menu przechodzimy na &#8220;Add Authorization Providers&#8221; i ostatecznie klikamy na &#8220;Add Authorization Rule Provider&#8221;<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/authorization.jpg\" rel=\"attachment wp-att-453\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/authorization.jpg\" alt=\"authorization\" width=\"800\" class=\"aligncenter size-full wp-image-453\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/authorization.jpg 1022w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/authorization-150x77.jpg 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/authorization-300x155.jpg 300w\" sizes=\"(max-width: 1022px) 100vw, 1022px\" \/><\/a><br \/>\nW ten spos\u00f3b dodali\u015bmy domy\u015blny &#8220;Rule Provider&#8221;, teraz mo\u017cemy stworzy\u0107 regu\u0142y dost\u0119pu do naszej aplikacji. W tym celu musimy klikn\u0105\u0107 w lewy dolny r\u00f3g pola &#8220;Authorization Rule Provider&#8221;, a nast\u0119pnie z menu, kt\u00f3re si\u0119 pojawi wybra\u0107 &#8220;Add Authorization Rule&#8221;<br \/>\n<a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/rule.jpg\" rel=\"attachment wp-att-456\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/rule.jpg\" alt=\"rule\" width=\"800\" class=\"aligncenter size-full wp-image-456\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/rule.jpg 1018w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/rule-150x79.jpg 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/rule-300x157.jpg 300w\" sizes=\"(max-width: 1018px) 100vw, 1018px\" \/><\/a><br \/>\nW oknie aplikacji pojawi si\u0119 nowy element &#8211; &#8220;Authorization Rule&#8221;, nadajmy mu nazw\u0119 &#8220;DevelopersOnly&#8221;, a nast\u0119pnie zdefiniujmy tzw. &#8220;Rule expression&#8221;. &#8220;Rule expression&#8221; jest warunek jaki musi zosta\u0107 spe\u0142niony, aby u\u017cytkownik uzyska\u0142 dost\u0119p do cz\u0119\u015bci aplikacji chronionej przez regu\u0142\u0119 &#8220;DevelopersOnly&#8221;. Wyra\u017cenie to mo\u017cemy wpisa\u0107 r\u0119cznie, lub poprzez prosty kreator &#8211; dost\u0119pny jest on pod przyciskiem &#8220;&#8230;&#8221;.<br \/>\nStw\u00f3rzmy wi\u0119c regu\u0142\u0119, kt\u00f3ra pozwoli tylko u\u017cytkownikom typu Developer oraz oczywi\u015bcie adminowi mie\u0107 dost\u0119p do jakie\u015b cz\u0119\u015bci aplikacji. Otw\u00f3rzmy zatem &#8220;Rule Expression Editor&#8221; (dost\u0119pny on jest pod przyciskiem &#8220;&#8230;&#8221;), kliknijmy na przycisk &#8220;Role&#8221;, wpiszmy &#8220;Developer&#8221;, nast\u0119pnie kliknijmy w przycisk &#8220;OR&#8221;, wpiszmy &#8220;Admin&#8221;.Mo\u017cemy r\u00f3wnie\u017c wpisa\u0107 nast\u0119puj\u0105ce wyra\u017cenie r\u0119cznie<\/p>\n<pre lang=\"bash\">\r\nR:Developer OR R:Admin\r\n<\/pre>\n<p><a href=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/ruleeditor.jpg\" rel=\"attachment wp-att-457\"><img decoding=\"async\" src=\"http:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/ruleeditor.jpg\" alt=\"ruleeditor\" width=\"463\" class=\"aligncenter size-full wp-image-457\" srcset=\"https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/ruleeditor.jpg 463w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/ruleeditor-150x140.jpg 150w, https:\/\/tpodolak.com\/blog\/wp-content\/uploads\/2012\/01\/silverlight-koncepcja-logowania-z-uzyciem-membershipproviders-oraz-wcf-ria-cz-3-microsoft-enterprise-library-security-block\/ruleeditor-300x279.jpg 300w\" sizes=\"(max-width: 463px) 100vw, 463px\" \/><\/a><br \/>\nStworzyli\u015bmy zatem regu\u0142\u0119 pozwalaj\u0105c\u0105 na dost\u0119p u\u017cytkownikom typu Developer (R:Developer) oraz administratorom (R:Admin). Aby zatwierdzi\u0107 zmiany wybieramy &#8220;Save&#8221; z menu &#8220;File&#8221;. W pliku Web.config pojawi\u0142y si\u0119 teraz nast\u0119puj\u0105ce linijki<\/p>\n<pre lang=\"xml\">\r\n<securityConfiguration>\r\n    <authorizationProviders>\r\n      <add type=\"Microsoft.Practices.EnterpriseLibrary.Security.AuthorizationRuleProvider, Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\"\r\n        name=\"Authorization Rule Provider\">\r\n        <rules>\r\n          <add expression=\"R:Developer OR R:Admin\" name=\"DevelopersOnly\" \/>\r\n        <\/rules>\r\n      <\/add>\r\n    <\/authorizationProviders>\r\n<\/securityConfiguration>\r\n<\/pre>\n<p>Do powy\u017cej konfiguracji musimy jeszcze dorzuci\u0107 wyb\u00f3r domy\u015blnego providera &#8211; dodajmy zatem nast\u0119puj\u0105cy wpis do linii <securityConfiguration><\/p>\n<pre lang=\"xml\">\r\ndefaultAuthorizationInstance=\"Authorization Rule Provider\"\r\n<\/pre>\n<p>Wykorzystajmy teraz stworzon\u0105 w\u0142a\u015bnie regu\u0142\u0119 aby zabezpieczy\u0107 wspomnian\u0105 wcze\u015bniej funkcj\u0119 &#8220;DevelopersCanDownloadThis&#8221;. Po pierwsze stw\u00f3rzmy pomocnicz\u0105 klas\u0119 pomocnicz\u0105 SecurityHelper i dodajmy do niej metod\u0119 IsAuthorized, kt\u00f3ra wygl\u0105da w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre lang=\"csharp\">\r\npublic static bool IsAuthorized(this IPrincipal principal, string rule)\r\n{\r\n    IAuthorizationProvider ruleProvider = EnterpriseLibraryContainer.Current.GetInstance<IAuthorizationProvider>();\r\n    return ruleProvider.Authorize(principal, rule);\r\n}\r\n<\/pre>\n<p>Nast\u0119pnie w funkcji &#8220;DevelopersCanDownloadThis&#8221; musimy sprawdzi\u0107 czy u\u017cytkownik mo\u017ce wykorzysta\u0107 t\u0105 funkcj\u0119 &#8211; w tym celu wykorzystujemy funkcj\u0119 IsAuthorized. Mo\u017ce wygl\u0105da\u0107 to w nast\u0119puj\u0105cy spos\u00f3b<\/p>\n<pre lang=\"csharp\">\r\npublic string DevelopersCanDownloadThis()\r\n{\r\n    if (ServiceContext.User.IsAuthorized(\"DevelopersOnly\"))\r\n        return \"very secure data\";\r\n    throw new PermisionDeniedException(\"Brak dost\u0119pu\");\r\n}\r\n<\/pre>\n<p>Loguj\u0105c si\u0119 na u\u017cytkownika, kt\u00f3ry posiada prawo\/rol\u0119 &#8220;Developer&#8221; b\u0119dziemy mogli pobra\u0107 dane wykorzystuj\u0105c funkcj\u0119 &#8220;DevelopersCanDownloadThis&#8221; w przeciwnym razie do klienta zostanie rzucony wyj\u0105tek z odpowiednim komunikatem. Niestety Security Block nie zosta\u0142 jeszcze przeniesiony na platform\u0119 Silverlightow\u0105, zatem przedstawionych powy\u017cej sposob\u00f3w sprawdzania praw dost\u0119pu(np. do jakiej\u015b funkcjonalno\u015bci) nie mo\u017cemy zastosowa\u0107 po stronie klienta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym wpisie postaram si\u0119 kr\u00f3tko przedstawi\u0107 blok bezpiecze\u0144stwa (Security Block) z biblioteki Microsoft Enterprise Library. Biblioteki tej u\u017cyjemy do sprawdzania rol i regu\u0142 dost\u0119pu do funkcji serwisu WCF. Najpierw oczywi\u015bcie musimy pobra\u0107 bibliotek\u0119 Microsoft Enterprise Library, znajduje si\u0119 ona pod tym adresem. http:\/\/www.microsoft.com\/download\/en\/details.aspx?id=15104. Biblioteka ta jest r\u00f3wnie\u017c dost\u0119pna z poziomu NuGeta, jednak\u017ce instalacja poprzez [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,122,121,123,44,12],"tags":[251,252,253,254,190,167],"class_list":["post-56","post","type-post","status-publish","format-standard","hentry","category-authentication","category-enterprise-library","category-roles","category-security-block","category-silverlight","category-wcf","tag-authentication","tag-enterprise-library","tag-roles","tag-security-block","tag-silverlight","tag-wcf"],"_links":{"self":[{"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/posts\/56","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/comments?post=56"}],"version-history":[{"count":3,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/posts\/56\/revisions"}],"predecessor-version":[{"id":458,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/posts\/56\/revisions\/458"}],"wp:attachment":[{"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/media?parent=56"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/categories?post=56"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tpodolak.com\/blog\/wp-json\/wp\/v2\/tags?post=56"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}