Es fácil tomarse un tiempo para aprender algo entre las pesadas tareas de desarrollo. Descubrí que hay varios ejemplos de contenido System.Security en la máquina. Nunca antes había usado este espacio de nombres, así que solo lo usé para aprender sobre él. Como no es un estudio sistemático, no es fácil de organizar. Después de pensarlo, lo explicaré con ejemplos.
1. Establecer el permiso
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2Aplicación de clase pública: System.Windows.Forms.Form
3{
4 //omitido
5}
FileIOPermissionAttribute se define en System.Security.Permissions. Hereda de SecurityAttribute. En este ejemplo, se requiere tener permisos de escritura en el archivo C:temp.txt cuando se usa la clase App.
La documentación de .net framework tiene esto que decir sobre los requisitos de seguridad: "Para garantizar que solo las personas que llaman a quienes se les han otorgado permisos específicos puedan llamar a su código, puede declarar o hacer cumplir que las personas que llaman a su código tengan permisos específicos o conjunto de permisos. Causa de los requisitos el tiempo de ejecución realiza una verificación de seguridad, imponiendo así restricciones en el código de llamada. Durante la verificación de seguridad, el tiempo de ejecución recorre la pila de llamadas, verifica los permisos de cada persona que llama en la pila y determina si se han otorgado los permisos solicitados. llamador. Si se descubre que un llamador no tiene los permisos requeridos, la verificación de seguridad falla y se genera una excepción de seguridad.
En el ejemplo, se declaran los permisos. SecurityAction.Demand puede actuar sobre una clase o método, en este caso actúa sobre una clase. Escribir es una de las propiedades de FileIOPermission. Otras propiedades comúnmente utilizadas incluyen Leer, Agregar, Todo, etc.
También hay algunos valores en la enumeración SecurityAction que actúan sobre el ensamblado. Por ejemplo, el siguiente ejemplo:
[ensamblaje:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum es el permiso mínimo para que se ejecute la solicitud. Esta línea requiere que el ensamblado permita llamadas a código no administrado.
Además del método declarativo, también puedes utilizar el método obligatorio. El siguiente código:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2 intento
3{
4 archivoPerm.Demand();
5
6 // El código para acceder al archivo va aquí
7}
8catch (excepción de seguridad)
9{
10 MessageBox.Show (excepto Mensaje);
11 regreso;
12}
13
2. Gestión de roles de usuario
La gestión de usuarios y sus roles se utiliza en muchos programas. Hoy en día, asp.net 2.0 ha mejorado mucho este aspecto y los desarrolladores pueden crear muy buenas aplicaciones sin saber mucho de tecnología. Sin embargo, para las aplicaciones de Windows Form, los propios programadores aún deben establecer muchos lugares.
Suponiendo que ya conocemos el nombre de usuario y los roles a los que pertenece, podemos configurar el principal del hilo actual de esta manera:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = nuevo GenericPrincipal(genIdent, roles);
3Thread.CurrentPrincipal = genPrin;
4
Luego tenemos tres formas de verificar los roles de los usuarios.
El primer método es utilizar el método GenericPrincipal.IsInRole:
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (Prin actual! = nulo && Prin actual.IsInRole ("Administrador"))
4{
5 //omitido
6}
7
El segundo método es utilizar la clase PrincipalPermission, que es similar al método obligatorio en la configuración de permisos:
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3 intento
4{
5 prinPerm.Demand();
6
7 //haz algo
8}
9 captura
10{
11 //manejo de errores
12}
El tercer método es similar al método de declaración en la configuración de permisos:
1private void DecPermButton_Click(remitente del objeto, System.EventArgs e)
2{
3 intento
4 {
5 realizarAcciónManager();
6 // haz algo
7}
8 captura
9 {
10 // manejo de errores
11 }
12}
13
14[Permiso principal(SecurityAction.Demand, Role="Administrador")]
15void realizarManagerAction()
16{
17}
Otro aspecto importante de la seguridad es el cifrado. No tengo tiempo para escribir hoy, hablaré de ello otro día.