yoyo041080
Messages postés18Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention10 septembre 2007
-
1 août 2007 à 11:19
yoyo041080
Messages postés18Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention10 septembre 2007
-
2 août 2007 à 16:58
Bonjour à tous,
Supposons que j'ai 3 assemblys A, B et C
Dans l'assembly A, une classe Ca dont les méthodes sont :
* methA1
* methA2
* methA3
Dans l'assembly B, une classe Cb dont les méthodes sont :
* methB1
* methB2
* methB3
Dans l'assembly C, une classe Cc dont les méthodes sont :
* methC1
* methC2
* methC3
Prérequis obligatoire : Toutes les méthodes de la classe Cb (de l'assembly B) doit pouvoir appeler les méthodes de la classe Cc (de l'assembly C) et vice-versa, les méthodes et les classes doivent donc être public (pas "friendly")
Ce que je voudrais faire, c'est que depuis les méthodes de ma classe Ca (de mon assembly A (methA1, methA2, methA3)), je ne puisse par exemple :
* n'avoir accès que à la méthode methB2 de ma classe Cb de mon assembly B. Les deux autres méthodes methB1 et methB3 ne doivent pas être accessible à ma classe Ca
J'ai trouvé pas mal d'attributs de sécurité qui permettent d'empecher l'accès à certaines ressources (disques, réseaux, etc), mais pas aux méthodes...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 1 août 2007 à 12:45
[déplacé vers csharpfr.com, plus de chance de réponses ]
Je ne suis pas sur que ce mécanisme soit implémenté au niveau de .net. Mais si c'est le cas il faut aller voir du coté de CAS (Control Access Security).
Tiens nous au courant si tu as d'avantages d'infos, la question m'interesse.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 1 août 2007 à 17:58
> Bidou : le message de raptorXP est sur le fonctionnement général de CAS. Il faudrais un attribuer spécifique qui prend en paramètre la publickey de ton assembly appellante. Mais là encore je suis pas sur que ca serve à quelque chose.
Sinon, peux tu nous expliquer le contexte ? es tu sur d'avoir vraiment besoin de faire ce truc tout bizarre ? on peut pas simplifier ? L'autre solution que je vois c'est de le faire "manuellement" en rajoutant un argument à ta méthode et tu lui passes une clé ... mais bof :s Où alors en fouillant au niveau du stack trace pour regarder le caller et vérifier l'assembly. Mais comment connaitre le caller de la fonction ? pour l'instant je suis pas sur que ce soit possible mis à part provoquer manuellement une exception :D
Bon, c'est pas une méthode très propre, c'est couteux et surtout, surtout ca ne fonctionnera pas si ton assembly n'a pas les droits de reflexion (restriction CAS) (j'ai pas testé mais ca parait assez logique)
Mais je ne suis pas expert en sécurité CAS, si tu as un peu de temps, je te conseille de regarder au niveau de CAS quitte à créer ta propre sécurité si elle n'existe pas :-p
yoyo041080
Messages postés18Date d'inscriptionmercredi 18 mai 2005StatutMembreDernière intervention10 septembre 2007 2 août 2007 à 09:18
Le contexte :
1) je donne la possibilité à mes utilisateurs finaux d'écrire certaines règles métiers de traitement sous la forme de scipt VB.net
2) Je compile et exécute à la volée ces scripts via une assembly B
3) Ces scripts ont accès à une assembly A contenant mes objets métiers (c'est nécessaire pour leur traitement)
Le souci : les utilisateurs bidouilleur ayant accès aux objets métiers peuvent faire un peu tout ce qu'il veulent dans la mesure où ils ont accès à la totalité des fonctionnalités (méthodes) de ces objets : DANGEREUX !
C'est pour cela que je veux définir quelles méthodes des mes objets métiers de mon assembly B seront dispo pour mes scripts de mon assembly A
Depuis le framework 2.0, ça fait 4 sites de gars de chez microsoft qui explique que si l'assembly tourne en mode "Full Trust", le StrongNameIdentityPermission n'est pas vérifié...
Certains me diront : "ben change le niveau de trust de ton assembly". Jen e peux pas, elle est généré à la volée...
Je continue à chercher, toutes les pistes restes les bienvenue...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 2 août 2007 à 16:53
Tu charges tes assembly dynamique dans le meme appdomain ou non ? Il ne faut pas que tu les charges dans le meme appdomain car tu dois avoir des options de sécurité au niveau d'un AppDomain, il doit meme etre possible de changer le trust level dynamiquement d'un appdomain.
Si tu ne l'as pas déjà fait, essate de regarder les options de sécurité au niveau des appdomains.