By passing identity information (user name and role) to the constructor, PrincipalPermission can be used to demand that the identity of the active principal matches this information.
To match the active IPrincipal and associated IIdentity, both the specified identity and role must match. If nullNothingnullptra null reference (Nothing in Visual Basic) identity string is used, it is interpreted as a request to match any identity. Use of nullNothingnullptra null reference (Nothing in Visual Basic) role string will match any role. By implication, passing nullNothingnullptra null reference (Nothing in Visual Basic) parameter for name or role to PrincipalPermission will match the identity and roles in any IPrincipal. It is also possible to construct a PrincipalPermission that only determines whether the IIdentity represents an authenticated or unauthenticated entity. In this case, name and role are ignored.
Unlike most other permissions, PrincipalPermission does not extend CodeAccessPermission. It does, however, implement the IPermission interface. This is because PrincipalPermission is not a code access permission; that is, it is not granted based on the identity of the executing assembly. Instead, it allows code to perform actions (Demand, Union, Intersect, and so on) against the current user identity in a manner consistent with the way those actions are performed for code access and code identity permissions.
Important Note: |
|---|
Prior to a demand for principal permission it is necessary to set the current application domain's principal policy to the enumeration value
WindowsPrincipal. By default, the principal policy is set to UnauthenticatedPrincipal. If you do not set the principal policy to WindowsPrincipal, a demand for principal permission will fail. The following code should be executed before the principal permission is demanded:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal).
|