Change the Current User Role in Code
- 2 minutes to read
This topic describes how to access and edit a user’s role collection in applications with Integrated Mode.
Follow the steps below to replace the “Default” role with “Extended”.
- Create a new ViewController with SimpleAction and handle the Action’s Execute event.
- In the event handler, call the CreateNonsecuredObjectSpace (XPO/EF Core) method to create a non-secured IObjectSpace instance. The non-secured Object Space ignores security permissions and provides access to all data.
- Use the GetSecurityStrategy(XafApplication) method and User property to access the current user. Call the GetObject(Object) method to copy the user object to the non-secured Object Space.
- Remove the “Default” role from the Roles collection and add the “Extended” role to this collection.
- Call the CommitChanges() method of the unsecured Object Space to save these changes.
- Call the Refresh() method of the main Object Space to display the new changes in the UI.
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.Security;
using DevExpress.Persistent.BaseImpl.PermissionPolicy;
using System.Linq;
// ...
public class SetExtendedRoleController : ViewController {
SimpleAction setExtendedRoleAction;
public SetExtendedRoleController() {
setExtendedRoleAction = new SimpleAction(this, "SetExtendedRole", PredefinedCategory.Edit);
setExtendedRoleAction.Execute += SetExtendedRoleAction_Execute;
}
private void SetExtendedRoleAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
using (IObjectSpace nonSecuredObjectSpace =
((INonsecuredObjectSpaceProvider)Application.ObjectSpaceProvider).CreateNonsecuredObjectSpace()) {
SecurityStrategy security = Application.GetSecurityStrategy();
ApplicationUser user = (ApplicationUser)nonSecuredObjectSpace.GetObject(security.User);
PermissionPolicyRole oldRole = user.Roles.FirstOrDefault(r => r.Name == "Default");
if (oldRole != null) {
PermissionPolicyRole newRole =
nonSecuredObjectSpace.FirstOrDefault<PermissionPolicyRole>(r => r.Name == "Extended");
user.Roles.Remove(oldRole);
user.Roles.Add(newRole);
nonSecuredObjectSpace.CommitChanges();
ObjectSpace.Refresh();
}
}
}
}
See Also