protected override void ExecuteStatement(ExecutionContext context)
{
var userName = context.User.Name;
//bool modifyOwnRecord = userName.Equals(UserName);
//bool secureAccessPrivs = context.User.CanManageUsers();
//if (!(modifyOwnRecord || secureAccessPrivs))
// throw new MissingPrivilegesException(userName, new ObjectName(UserName), Privileges.Alter);
//if (String.Equals(UserName, "public", StringComparison.OrdinalIgnoreCase))
// throw new SecurityException("User 'public' is reserved.");
if (AlterAction.ActionType == AlterUserActionType.SetPassword) {
var password = ((SqlConstantExpression) ((SetPasswordAction) AlterAction).PasswordExpression).Value;
var passwordText = password.Value.ToString();
context.DirectAccess.AlterUserPassword(UserName, passwordText);
} else if (AlterAction.ActionType == AlterUserActionType.SetRoles) {
var roleNames = ((SetUserRolesAction)AlterAction).Roles
.Cast<SqlConstantExpression>()
.Select(x => x.Value.Value.ToString())
.ToArray();
context.DirectAccess.SetUserRoles(UserName, roleNames);
} else if (AlterAction.ActionType == AlterUserActionType.SetAccountStatus) {
context.DirectAccess.SetUserStatus(UserName, ((SetAccountStatusAction)AlterAction).Status);
}
}