How to: Use the Integrated Mode of the Security System in Non-XAF Applications

This topic demonstrates the code that you can use in any non-XAF application to access data protected by the Security System.

Tip

A complete sample project is available in the DevExpress Code Examples database at http://www.devexpress.com/example=E4908.

  1. Initialize the Types Info system and register the business objects that you will access from your code.

    using DevExpress.ExpressApp;
    using DevExpress.Persistent.BaseImpl.PermissionPolicy;
    //...
    XpoTypesInfoHelper.GetXpoTypeInfoSource();
    XafTypesInfo.Instance.RegisterEntity(typeof(Person));
    XafTypesInfo.Instance.RegisterEntity(typeof(PermissionPolicyUser));
    XafTypesInfo.Instance.RegisterEntity(typeof(PermissionPolicyRole));
    
  2. Create a non-secure Object Space by using an XPObjectSpaceProvider object. This Object Space is required for logon.

    string connectionString =
        "Integrated Security=SSPI;Pooling=false;Data Source=(local);Initial Catalog=MySolution";
    XPObjectSpaceProvider directProvider = new XPObjectSpaceProvider(connectionString, null);
    IObjectSpace directObjectSpace = directProvider.CreateObjectSpace();
    
  3. Initialize the Security System and perform a logon. The code below demonstrates how to do this as a user named "User" who has an empty password.

    AuthenticationStandard auth = new AuthenticationStandard();
    auth.SetLogonParameters(new AuthenticationStandardLogonParameters("User", ""));
    SecurityStrategyComplex security = new SecurityStrategyComplex(typeof(PermissionPolicyUser), typeof(PermissionPolicyRole), auth);
    SecuritySystem.SetInstance(security);
    security.Logon(directObjectSpace);
    
  4. Create a secure Object Space by using a SecuredObjectSpaceProvider object. This Object Space can be used for secure data access.

    SecuredObjectSpaceProvider osProvider = new SecuredObjectSpaceProvider(security, connectionString, null);
    IObjectSpace securedObjectSpace = osProvider.CreateObjectSpace();
    
  5. Now you can call the securedObjectSpace Object Space's methods (e.g., IObjectSpace.GetObjects).

    foreach (Person person in securedObjectSpace.GetObjects<Person>()) {
         Console.WriteLine(person.FirstName);
    }
    

    Note that only objects that the “User” user is allowed access to will be printed with the code above. If you need to ignore security restrictions, use the non-secure directObjectSpace Object Space.

Important

If the XafApplication.TablePrefixes option is specified in your XAF application, then it is necessary to manually call the ITableNameCustomizer.Customize method of the Object Space Provider in your non-XAF application and pass the same table prefixes string.

See Also