Altairis Simple ASP.NET SQL Providers ke stažení

Provider object model v ASP.NET 2.0 představuje velký krok kupředu proti verzi 1.x. Vestavěné SQL providery jsou ovšem pro většinu aplikací prakticky nepoužitelné, protože vyžadují velice specifickou databázovou strukturu.

Hlavním motivem při tvorbě vestavěných providerů (jejichž zdrojové kódy jsou mimochodem volně dostupné) byla naprostá univerzálnost. Databáze je tedy "rozkročena" velice široce, umožňuje uchovávat jakýkoliv serializovatelný typ v profilech, údaje více nezávislých aplikací v jedné struktuře tabulek a podobně.

Altairis Simple ASP.NET SQL Providers

Knihovna Altairis Simple ASP.NET SQL Providers obsahuje tři providery:

  • Altairis.Web.Providers.SimpleSqlMemebrshipProvider - membership provider pro správu uživatelů
  • Altairis.Web.Providers.SimpleSqlProfileProvider - profile provider pro uchovávání dalších údajů o uživatelích
  • Altairis.Web.Providers.SimpleSqlRoleProvider - role provider pro správu rolí a členství uživatelů v nich

Moji provideři nejsou tak univerzální jako ty vestavěné. Nepodporují např. anonymní profily, mají pouze některé typy vlastností v profilech, neumí blokování účtů nebo více nezávislých aplikací v jedné databázi). Hlavním motivem při jejich tvorbě byla nicméně snadná integrace se zbytkem databázové struktury libovolné aplikace.

Membership a Profile provider si vystačí každý s jednou tabulkou, Role provider potřebuje dvě. Ze shora uvedených důvodů nepoužívám ani uložené procedury a podobně. Rovněž je snadné tuto strukturu upravit, případně do ní přidat vlastní pole, které vaše aplikace využívá.

Release Candidate 1 a CodePlex

CodePlex

Od samého počátku bylo mým záměrem tuto knihovnu zveřejnit, ale neustále jsem nebyl schopen k nim napsat nějakou dokumentaci a zejména udržovat publikovanou verzi projektu v aktuálním stavu. Microsoft nicméně spustil nový komunitní projekt CodePlex, kde existuje infrastruktura, která by mi tento úkol měla značně ulehčit.

Tyto providery již delší dobu úspěšně používám na řadě svých projektů (včetně toho na který se právě díváte nebo známého webu akce.altairis.cz). Většina chyb by tedy měla být již vychytána.

Můj plán je neomezovat se pouze na české vývojáře, pište proto prosím v angličtině. Pokud máte zájem podílet se na vývoji, i to je možné. Knihovna je zveřejněna pod Microsoft Shared Source Permissive License (MS-PL), což znamená, že její zdrojový kód můžete upravovat a šířit.

Titulek:
Text komentáře:
Vaše jméno:
Váš e-mail: (nebude zveřejněn)

WWW stránka:
Opište text z obrázku:
odpovědětodpovědět Gravatar

Velký dík

12.10.2006 18:56:2612.10.2006 18:56:26 Zdeněk ČejkaZdeněk Čejka ---.69.broadband3.iol.cz

Děkuji mnohokrát, stal jsem se prvním stahujícím:-) ...pokud jim tedy fungují ty čítače. Jdu se do toho ponořit.

odpovědětodpovědět Gravatar

Díky

12.10.2006 21:18:5112.10.2006 21:18:51 PeMaPeMa ---.karneval.cz

Tak přesne tohle jsem potřeboval. Moc díky.

odpovědětodpovědět Gravatar

IPrincipal Interface

Pouzivam take vlastni MembershipProvider, MembershipUser a RoleProvider.

Chtel jsem ale take vytvoril vlastni CustomPrincipal : System.Security.Principal.IPrincipal, zde jsem to ale jiz nebyl schopen dotahnout.

Nebylo by mozne prihodit take nejaky priklad?

Chtel by pouzit napr. takto

[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "PowerUser, Management")]

public partial class person : System.Web.UI.UserControl

{

....

}

IPrincipal Interface

A principal object represents the security context of the user on whose behalf the code is running, including that user's identity (IIdentity) and any roles to which they belong.

http://msdn2.microsoft.com/en-us/library/system.security.principal.iprincipal.aspx

odpovědětodpovědět Gravatar

Upřednostnit další provider?

Co by mě mělo - jakožto líného programátora - přesvědčit, že toto Simple řešení mám upřednostnit před využitím defaultních providerů? K integraci se zbytkem struktury jiných jednodušších aplikací většinou stačí uživatelský guid, takže mi to nepříjde o tolik problematičtější. V čem jsou další přínosy? Rychlost? Přehledná struktura v databázi? - Do tabulek defaultních providerů člověk zase tak často neleze, takže co nevidím? :)

odpovědětodpovědět Gravatar

RE: Upřednostnit další provider?

Záleží na způsobu, jakým píšete své aplikace.

Já hodně používám funkce na straně SQL serveru, primární klíče, pohledy a podobně. Pro to přehlednou - a modifikovatelnou - DB strukturu potřebuju, abych mohl pracovat s uživateli i jinak než přes to API.

Pokud vy pracujete jinak, může vám být efektivně jedno, jakou DB strukturu má provider za zadkem.

Gratuluju, o tomhle projektu píše i ScottGu a naví použil slovo cool ;)

Líná huba, holé neštěstí - poslal jsem mu mail. Kromě toho, že Amík použije slovo "cool" zase tak moc neznamená ;-) Nicméně jsem rád, že se o tom jeho prostřednictvím dozví víc lidí.

A vypadá to, že nejenom ScottGu o tom informuje. Teď se mi ve čtečce objevil další link i s citací a to na infoq. http://www.infoq.com/news/ASP.Net-Providers

Takže ještě jedna gratulace.

odpovědětodpovědět Gravatar

Offtopic videoarchiv

17.10.2006 21:39:2217.10.2006 21:39:22 FrantaFranta 88.103.47.---

Můžu se zeptat na 5. díl od ASP.NET. Neviděl jsem ho ve videoarchivu.

Díky F.

odpovědětodpovědět Gravatar

schme dbo

4.12.2006 18:02:514.12.2006 18:02:51 PetrPetr 212.111.8.---

Zajímalo by me zda provider musi bezet pod dbo nebo ne? u tech od MS asi jo ze???

odpovědětodpovědět Gravatar

Dokumentace - kde?

DD, je k tomu teda ta dokumentace?

Dokumentace k čemu?

odpovědětodpovědět Gravatar

Hledaní podle příjmení/jména apod.

23.5.2007 11:31:2223.5.2007 11:31:22 PetrPetr ---.121.broadband3.iol.cz

Chtěl bych se zeptat zda umí tvoje providery hledat uživatele i podle příjmení čí jména nebo jiného údaje zadaného u profilu.

Diky

odpovědětodpovědět Gravatar

RE: Hledaní podle příjmení/jména apod.

To neumí žádný profile provider, na to tam není API. Nicméně můj provider umožní ty údaje ukládat tak, že se dají prohledávat přímo, pomocí SQL dotazů do databáze.

odpovědětodpovědět Gravatar

Jak se dostat na profile v BLL?

29.9.2007 14:57:4929.9.2007 14:57:49 RadekRadek ---.121.broadband3.iol.cz

Je možné využívat Profile i BLL, která je jako samostatný projekt (nemá web.config)

DIky

odpovědětodpovědět Gravatar

RE: Jak se dostat na profile v BLL?

BLL je co?
odpovědětodpovědět Gravatar

RE: Jak se dostat na profile v BLL?

29.9.2007 17:47:3729.9.2007 17:47:37 RadekRadek ---.121.broadband3.iol.cz

Mám DAL Data access layer a BLL= Business Logic Layer vrstva co jsou samostane knihovny a potrebuju prave v BLL pracovat s profilem jde to nebo se to musi resit nejak jinak??

odpovědětodpovědět Gravatar

RE: Jak se dostat na profile v BLL?

Mno, pokud jde jenom o knihovnu a ta běží v rámci webové aplikace, pak se na profil dostanete pomocí System.Web.HttpContext.Current.Profile nebo tak nějak. Nebudete mít k dispozici strongly typed přístup, ale jsou tam metody nějak jako GetProperty a SetProperty. Pokud to běží úplně samostatně, tak nevím. V zásadě by mělo jít providera aktivovat ručně, ale nikdy jsem to nedělal.

odpovědětodpovědět Gravatar

profile provider - proxy calss

Dobrý den, velmi se mi líbí všechny tři Vaše providery. Mám ale problém při implementaci profile providera. V dokumentaci píšete, že .NET vytvoří během kompilace "proxy třídu", která je přítomna i ve Vašem příkladu. Mně se ale žádná taková třída při kompilaci nevytvoří (projekt se zkládá z class library - pro prividery, a web application, vs2005 sp1). Nevím kde dělám chybu. Můžete mi prosím pomoci?

odpovědětodpovědět Gravatar

RE: profile provider - proxy calss

5.9.2008 13:00:525.9.2008 13:00:52 OrionOrion http://www.orik.orghttp://www.orik.org ---.233.broadband9.iol.cz

Proxy trida se vytvari jedine kdyz projekt je website, pokavad je projekt webproject, tak prd, existuji ale generatory proxy trid pro vs 2005 a vs2008.

yo a altaire, dyz sem nezadal dobre adresu, tak mi to napsalo error a zmizel mi cudlik odeslat komentar, objevil se az dyz sem kliknul 2x na sipcicku s pridat komentar.

A jeste mas v simpleprofilerovi jednu takovou malinkou chybu pri ukladani nullable typu, to napisu primo na codeplex.

odpovědětodpovědět Gravatar

Problém s aktualizací na SP1

Ahoj, tyto providery používám v současném projektu. Problém nastal, když jsem nainstaloval SP1 - nevím přesně jestli pro .NET 3.5 nebo Visual Studio. Každopádně, dostávám řadu errorů týkající se konfigurace a celý web se chová, jako by byl uživatel přihlášen už od začátku. Máte někdo podobný problém? Nenapadá mě jak bych to měl řešit.

Díky, za jakoukoliv odpověď.

odpovědětodpovědět Gravatar

RE: Problém s aktualizací na SP1

Žádného problému se SP1 si nejsem vědom. Ve všech mých aplikacích co jsou na 3.5 SP1 mi provideři šlapou jako hodinky. Zkuste být trochu konkrétnější, co a kde vám to hlásí a kdyžtak pošlete konfigurák.

odpovědětodpovědět Gravatar

RE: Problém s aktualizací na SP1

Předem děkuji za rychlou odpověď.

Při pokusu o login (načtení stánky kde je Control login), popř. registraci

Dostanu tuto chybu:

Chyba konfigurace

Použití oddílu registrovaného jako allowDefinition='MachineToApplication' mimo úroveň aplikace je chybou. Tato chyba může být způsobena tím, že virtuální adresář není v rámci služeb IIS konfigurován jako aplikace.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="auto:cs-CZ" uiCulture="auto:cs-CZ" />

<membership defaultProvider="MyMembershipProvider"> <!-- CHYBA -->

<providers>

Pro vývoj používám VS9.0 s SP1. a .NET 3.5 SP1

Ještě taková otázka na okraj, víte o způsobu jak poangličtit toto vývojové prostředí? V češtině to je celkem pohodlné, ale špatně se mi pak vyledávají řešení k chybám.

Děkuji.

odpovědětodpovědět Gravatar

RE: Problém s aktualizací na SP1

Dobrý den, celé to zpískal zapomenutý web.config.. Moje chyba.

odpovědětodpovědět Gravatar

RE: Problém s aktualizací na SP1

11.12.2008 12:58:0011.12.2008 12:58:00 KloodKlood 62.24.71.---

> Ještě taková otázka na okraj, víte o způsobu jak poangličtit toto vývojové prostředí? V češtině to je celkem pohodlné, ale špatně se mi pak vyledávají řešení k chybám.

Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

odpovědětodpovědět Gravatar

GetAllUsers

20.3.2009 10:11:5720.3.2009 10:11:57 BohumilBohumil ---.avonet.cz

Zdravím,

... pokud použiji Membership.GetAllUsers(0,4, out total); ... tak mi to vrátí jen 3 uživatele...

pro stránkování je to pak nepoužitelné, nemělo by to vrátit 4?

dík...

odpovědětodpovědět Gravatar

Umístění tabulek mimo schéma dbo

Je možné umístit tabulky do jiného schématu než dbo? Když to pokusně udělám, tak tabulky nemůže najít, sql dotazy nefungují. Při umístění do dbo je vše OK. Nastavení schématu jsem nikde nenašel...

díky

Jirka Matějka

odpovědětodpovědět Gravatar

RE: Umístění tabulek mimo schéma dbo

Ano a ne ;-) V případě profile providera se název tabulky určuje konfiguračním parametrem tableName může obsahovat i schéma. V případě membership a role providerů to možné není, tam je napevno odkaz na tabulky Users, Roles a UsersInRoles v defaultním schématu (tedy nikoliv v dbo). Ale je to dobrá připomínka, mohl bych to udělat konfigurovatelné, až na to budu mít trochu času. A nebo to udělejte sám a postněte patch, ostatně od toho je to open source.
odpovědětodpovědět Gravatar

Security context hack for HostingEnvironment.Impersonate

5.3.2010 13:39:155.3.2010 13:39:15 BambaBamba ---.9.broadband16.iol.cz

Dobrý den, koukal jsem na kód a není mi úplně jasné použití "Security context hack for HostingEnvironment.Impersonate".

Trošku jsem se po tom pídil, ale né nějak zvlášť, takže možná budu blábolit. Z toho, co jsem se dočetl, tak je to z důvodu zabránění spuštění kódu pod "imperosonovanou" osobou v catch bloku volající funkce. Mám ale za to, že tím, že je volání HostingEnvironment.Impersonate() v bloku using, tak před voláním bloku catch se zavolá Dispose na objektu, který vrací Impersonate() a tím se zavolá také Undo, takže v catch bloku již nebude použit context imperosonované osoby. Je to tak, nebo mi něco zásadního uniklo?

odpovědětodpovědět Gravatar

RE: Security context hack for HostingEnvironment.Impersonate

5.3.2010 14:44:585.3.2010 14:44:58 BambaBamba ---.9.broadband16.iol.cz

No taky jsem si to mohl vyzkoušet dřív, než jsem sem psal. Teď jsem to zkusil a to Dispose se při použití catch s podmínkou ve VB zavolá pozdě. Už jen vědět, proč to tak je a budu štastný člověk.

odpovědětodpovědět Gravatar

RequiresUniqueEmail="false"

25.6.2010 21:48:4425.6.2010 21:48:44 DavidDavid ---.static.adsl.vol.cz

Dobry den, melo by to fungovat? Prevadim starsi databazi, kde toto bylo povoleno a nedari se mi to vypnout. Pri createuser dochazi k chybe. Dekuji za odpoved

odpovědětodpovědět Gravatar

RE: RequiresUniqueEmail="false"

V zásadě by to fungovat mělo. Zkuste napsat, co vám to konkrétně hlásí, jakou chybu.

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET