c# security permissions multilanguage

c# - ¿Cómo establecer un nombre de rol principalPermission multilenguaje?



security permissions (5)

¿Estás absolutamente seguro de que en un sistema de idioma alemán, el "BUILTIN / Administrators" no funcionará? Me hubiera imaginado que incluso entonces, estos nombres de grupos básicos deberían ser válidos. Sí, en sus herramientas de administración, mostrará "Vordefiniert / ADministratoren", pero me sorprendería que el atributo PrincipalPermission dependa del idioma.

Bagazo

Estoy intentando asegurar un servicio WCF usando cuentas de Windows. El servicio debería ejecutarse en muchos sistemas con diferentes idiomas. ¿Cómo puedo establecer una PrincipalPermission que tenga nombres de roles independientes del idioma?

Encontré soluciones feas como esta.

[PrincipalPermission(SecurityAction.Demand, Role = "Builtin//Administrators")] // English [PrincipalPermission(SecurityAction.Demand, Role = "Vordefiniert//Administratoren")] // German public string HelloWorld() { return "Hello"; }

No creo que esta sea una buena solución, ¿hay alguna manera de hacer que este lenguaje sea independiente? ¿Hay alguna forma de usar el SID de la cuenta en lugar de una cadena?


Hmmmm, no usaría un nombre de grupo directamente en mi código (codificado). Intente resumirlo en un rol como "HelloWorldAdmin" y tenga una función configurada en la aplicación.config. Este debe estar asignado a un grupo de usuarios. Esto permitiría a sus usuarios / administradores seleccionar un grupo y asignarlo a la función (por ejemplo, en el caso de que los administradores de la aplicación no sean sus administradores de AD). Eche un vistazo a http://msdn.microsoft.com/en-us/library/ms998314.aspx . HTH.


Puede utilizar la versión imperativa y convertir dinámicamente un formulario de idioma neutral (por ejemplo, SID) a la forma localizada (puede ser a través de SecurityIdentifier.Translate).

Los SID bien conocidos se enumeran en KB 243330.



Puedes rodar tu propio atributo de permiso que maneja la traducción:

[Serializable, AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = false), ComVisible(true)] public sealed class AdministratorPrincipalPermissionAttribute : CodeAccessSecurityAttribute { public AdministratorPrincipalPermissionAttribute(SecurityAction action) : base(action) { } public override IPermission CreatePermission() { var identifier = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); var role = identifier.Translate(typeof(NTAccount)).Value; return new PrincipalPermission(null, role); } }

Tenga en cuenta que esto requeriría algún esfuerzo de despliegue adicional (gac, caspol, etc.).