Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.cs
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.cs	(revision 3940)
+++ 	(revision )
@@ -1,114 +1,0 @@
-using System;
-using System.Web.Security;
-
-namespace Persistence {
-  partial class HeuristicLabUser : MembershipUser {
-    public override bool ChangePassword(string oldPassword, string newPassword) {
-      if (oldPassword == null) {
-        throw new ArgumentNullException("oldPassword");
-      }
-      if (newPassword == null) {
-        throw new ArgumentNullException("newPassword");
-      }
-      if (oldPassword.Length == 0) {
-        throw new ArgumentException("Parameter oldPassword must not be empty!");
-      }
-      if (newPassword.Length == 0) {
-        throw new ArgumentException("Parameter newPassword must not be empty!");
-      }
-
-      if (Password.CompareTo(oldPassword) == 0) {
-        Password = newPassword;
-        return true;
-      } else {
-        return false;
-      }
-    }
-
-    public override bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer) {
-      if (password == null) {
-        throw new ArgumentNullException("password");
-      }
-      if (newPasswordQuestion == null) {
-        throw new ArgumentNullException("newPasswordQuestion");
-      }
-      if (newPasswordAnswer == null) {
-        throw new ArgumentNullException("newPasswordAnswer");
-      }
-      if (password.Length == 0) {
-        throw new ArgumentException("Parameter password must not be empty!");
-      }
-      if (newPasswordQuestion.Length == 0) {
-        throw new ArgumentException("Parameter newPasswordQuestion must not be empty!");
-      }
-      if (newPasswordAnswer.Length == 0) {
-        throw new ArgumentException("Parameter newPasswordAnswer must not be empty!");
-      }
-
-      if (Password.CompareTo(password) == 0) {
-        _PasswordQuestion = newPasswordQuestion;
-        PasswordAnswer = newPasswordAnswer;
-        return true;
-      } else {
-        return false;
-      }
-    }
-
-    public override string GetPassword() {
-      return Password;
-    }
-
-    //
-    // Summary:
-    //     Gets the password for the membership user from the membership data store.
-    //
-    // Parameters:
-    //   passwordAnswer:
-    //     The password answer for the membership user.
-    //
-    // Returns:
-    //     The password for the membership user.
-    public override string GetPassword(string passwordAnswer) {
-      throw new NotImplementedException();
-    }
-
-    //
-    // Summary:
-    //     Resets a user's password to a new, automatically generated password.
-    //
-    // Returns:
-    //     The new password for the membership user.
-    public override string ResetPassword() {
-      throw new NotImplementedException();
-    }
-
-    //
-    // Summary:
-    //     Resets a user's password to a new, automatically generated password.
-    //
-    // Parameters:
-    //   passwordAnswer:
-    //     The password answer for the membership user.
-    //
-    // Returns:
-    //     The new password for the membership user.
-    public override string ResetPassword(string passwordAnswer) {
-      throw new NotImplementedException();
-    }
-
-    public override string ToString() {
-      return UserName;
-    }
-
-    //
-    // Summary:
-    //     Clears the locked-out state of the user so that the membership user can be
-    //     validated.
-    //
-    // Returns:
-    //     true if the membership user was successfully unlocked; otherwise, false.
-    public override bool UnlockUser() {
-      throw new NotImplementedException();
-    }
-  }
-}
Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml	(revision 3940)
+++ branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml	(revision 3941)
@@ -3,12 +3,26 @@
   <Table Name="" Member="HeuristicLabUsers">
     <Type Name="HeuristicLabUser">
+      <Column Name="id" Member="ID" Storage="_id" Type="System.Int64" IsReadOnly="true" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
       <Column Name="UserName" Modifier="Override" Type="System.String" IsReadOnly="true" CanBeNull="false" />
       <Column Name="Password" Type="System.String" CanBeNull="false" />
+      <Column Name="LastPasswordChangedDate" Modifier="Override" Type="System.DateTime" IsReadOnly="true" CanBeNull="false" />
       <Column Name="PasswordQuestion" Modifier="Override" Type="System.String" IsReadOnly="true" CanBeNull="false" />
-      <Column Name="LastPasswordChangedDate" Modifier="Override" Type="System.DateTime" IsReadOnly="true" CanBeNull="false" />
+      <Column Name="PasswordAnswer" Type="System.String" CanBeNull="false" />
       <Column Name="Email" Modifier="Override" Type="System.String" CanBeNull="false" />
       <Column Name="Comment" Modifier="Override" Type="System.String" CanBeNull="false" />
-      <Column Name="PasswordAnswer" Type="System.String" CanBeNull="false" />
-      <Column Member="id" AutoSync="Never" Type="System.Int64" IsReadOnly="true" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Always" />
+    </Type>
+  </Table>
+  <Table Name="" Member="HeuristicLabAbstractRoles">
+    <Type Name="HeuristicLabAbstractRole" Modifier="Abstract">
+      <Column Name="ID" Type="System.Int64" IsReadOnly="true" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="roleName" Member="RoleName" Storage="_roleName" Type="System.String" CanBeNull="false" />
+      <Column Name="parentRoleID" Member="ParentRoleID" Storage="_parentRoleID" Type="System.Int64" CanBeNull="false" />
+      <Column Name="RoleType" Member="IsPermission" Storage="_RoleType" Type="System.Boolean" CanBeNull="false" IsDiscriminator="true" />
+      <Type Name="HeuristicLabRole" InheritanceCode="false" IsInheritanceDefault="true">
+        <Column Name="DummyField1" Type="System.String" CanBeNull="false" />
+      </Type>
+      <Type Name="HeuristicLabPermissionRole" InheritanceCode="true">
+        <Column Name="DummyField2" Type="System.String" CanBeNull="false" />
+      </Type>
     </Type>
   </Table>
Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml.layout
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml.layout	(revision 3940)
+++ branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.dbml.layout	(revision 3941)
@@ -1,12 +1,42 @@
 ﻿<?xml version="1.0" encoding="utf-8"?>
-<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11, 8.5" name="DataClasses">
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11, 8.5" name="DataClassesTemp">
   <DataContextMoniker Name="/DataClassesDataContext" />
   <nestedChildShapes>
-    <classShape Id="d272bb7d-2ecc-4bb7-851f-8e1ecee6fdbd" absoluteBounds="3.625, 1.875, 2, 2.3478011067708326">
+    <classShape Id="8a64982c-bf12-42de-930c-12197e5058b2" absoluteBounds="0.75, 1.125, 2, 2.3478011067708335">
       <DataClassMoniker Name="/DataClassesDataContext/HeuristicLabUser" />
       <nestedChildShapes>
-        <elementListCompartment Id="cb578485-5602-4fe8-96b8-63d240ffa2d9" absoluteBounds="3.64, 2.335, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+        <elementListCompartment Id="c2de162f-d029-4b40-9694-ef3f14c7a783" absoluteBounds="0.7649999999999999, 1.585, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
       </nestedChildShapes>
     </classShape>
+    <classShape Id="c7373ccc-61b3-43fb-88fa-14149d69bee9" absoluteBounds="5.5, 0.75, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/DataClassesDataContext/HeuristicLabAbstractRole" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c418e826-fe22-4952-802e-047da829e949" absoluteBounds="5.5150000005960464, 1.2100000008940697, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="b49c3eca-7de0-4ace-97ce-90212955db18" absoluteBounds="6.875, 2.75, 2, 1.0016910807291666">
+      <DataClassMoniker Name="/DataClassesDataContext/HeuristicLabRole" />
+      <nestedChildShapes>
+        <elementListCompartment Id="b2f6a32c-1cff-4bb5-9008-e4e430125a0a" absoluteBounds="6.89, 3.21, 1.9700000000000002, 0.44169108072916663" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="d798095d-2715-4342-bc36-c2e6602a4fba" absoluteBounds="4.125, 2.75, 2, 1.0016910807291666">
+      <DataClassMoniker Name="/DataClassesDataContext/HeuristicLabPermissionRole" />
+      <nestedChildShapes>
+        <elementListCompartment Id="8328fcdb-eadc-4d44-9aa5-5ae334106ddd" absoluteBounds="4.14, 3.21, 1.9700000000000002, 0.44169108072916663" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <inheritanceConnector edgePoints="[(6.5 : 2.32859537760417); (6.5 : 2.5); (7.875 : 2.5); (7.875 : 2.75)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="c7373ccc-61b3-43fb-88fa-14149d69bee9" />
+        <classShapeMoniker Id="b49c3eca-7de0-4ace-97ce-90212955db18" />
+      </nodes>
+    </inheritanceConnector>
+    <inheritanceConnector edgePoints="[(6.5 : 2.32859537760417); (6.5 : 2.5); (5.125 : 2.5); (5.125 : 2.75)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="c7373ccc-61b3-43fb-88fa-14149d69bee9" />
+        <classShapeMoniker Id="d798095d-2715-4342-bc36-c2e6602a4fba" />
+      </nodes>
+    </inheritanceConnector>
   </nestedChildShapes>
 </ordesignerObjectsDiagram>
Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.designer.cs
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.designer.cs	(revision 3941)
+++ branches/HeuristicLab.Services.Authentication Prototype/Persistence/DataClasses.designer.cs	(revision 3941)
@@ -0,0 +1,460 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4927
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Persistence
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	public partial class DataClassesDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertHeuristicLabUser(HeuristicLabUser instance);
+    partial void UpdateHeuristicLabUser(HeuristicLabUser instance);
+    partial void DeleteHeuristicLabUser(HeuristicLabUser instance);
+    partial void InsertHeuristicLabAbstractRole(HeuristicLabAbstractRole instance);
+    partial void UpdateHeuristicLabAbstractRole(HeuristicLabAbstractRole instance);
+    partial void DeleteHeuristicLabAbstractRole(HeuristicLabAbstractRole instance);
+    #endregion
+		
+		public DataClassesDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public DataClassesDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public DataClassesDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public DataClassesDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<HeuristicLabUser> HeuristicLabUsers
+		{
+			get
+			{
+				return this.GetTable<HeuristicLabUser>();
+			}
+		}
+		
+		public System.Data.Linq.Table<HeuristicLabAbstractRole> HeuristicLabAbstractRoles
+		{
+			get
+			{
+				return this.GetTable<HeuristicLabAbstractRole>();
+			}
+		}
+	}
+	
+	[Table(Name="")]
+	public partial class HeuristicLabUser : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _id = default(long);
+		
+		private string _UserName = default(string);
+		
+		private string _Password;
+		
+		private System.DateTime _LastPasswordChangedDate = default(System.DateTime);
+		
+		private string _PasswordQuestion = default(string);
+		
+		private string _PasswordAnswer;
+		
+		private string _Email;
+		
+		private string _Comment;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPasswordChanging(string value);
+    partial void OnPasswordChanged();
+    partial void OnPasswordAnswerChanging(string value);
+    partial void OnPasswordAnswerChanged();
+    partial void OnEmailChanging(string value);
+    partial void OnEmailChanged();
+    partial void OnCommentChanging(string value);
+    partial void OnCommentChanged();
+    #endregion
+		
+		public HeuristicLabUser()
+		{
+			OnCreated();
+		}
+		
+		[Column(Name="id", Storage="_id", AutoSync=AutoSync.OnInsert, IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		public long ID
+		{
+			get
+			{
+				return this._id;
+			}
+		}
+		
+		[Column(Storage="_UserName", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public override string UserName
+		{
+			get
+			{
+				return this._UserName;
+			}
+		}
+		
+		[Column(Storage="_Password", CanBeNull=false)]
+		public string Password
+		{
+			get
+			{
+				return this._Password;
+			}
+			set
+			{
+				if ((this._Password != value))
+				{
+					this.OnPasswordChanging(value);
+					this.SendPropertyChanging();
+					this._Password = value;
+					this.SendPropertyChanged("Password");
+					this.OnPasswordChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_LastPasswordChangedDate", UpdateCheck=UpdateCheck.Never)]
+		public override System.DateTime LastPasswordChangedDate
+		{
+			get
+			{
+				return this._LastPasswordChangedDate;
+			}
+		}
+		
+		[Column(Storage="_PasswordQuestion", CanBeNull=false, UpdateCheck=UpdateCheck.Never)]
+		public override string PasswordQuestion
+		{
+			get
+			{
+				return this._PasswordQuestion;
+			}
+		}
+		
+		[Column(Storage="_PasswordAnswer", CanBeNull=false)]
+		public string PasswordAnswer
+		{
+			get
+			{
+				return this._PasswordAnswer;
+			}
+			set
+			{
+				if ((this._PasswordAnswer != value))
+				{
+					this.OnPasswordAnswerChanging(value);
+					this.SendPropertyChanging();
+					this._PasswordAnswer = value;
+					this.SendPropertyChanged("PasswordAnswer");
+					this.OnPasswordAnswerChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Email", CanBeNull=false)]
+		public override string Email
+		{
+			get
+			{
+				return this._Email;
+			}
+			set
+			{
+				if ((this._Email != value))
+				{
+					this.OnEmailChanging(value);
+					this.SendPropertyChanging();
+					this._Email = value;
+					this.SendPropertyChanged("Email");
+					this.OnEmailChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Comment", CanBeNull=false)]
+		public override string Comment
+		{
+			get
+			{
+				return this._Comment;
+			}
+			set
+			{
+				if ((this._Comment != value))
+				{
+					this.OnCommentChanging(value);
+					this.SendPropertyChanging();
+					this._Comment = value;
+					this.SendPropertyChanged("Comment");
+					this.OnCommentChanged();
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="")]
+	[InheritanceMapping(Code="false", Type=typeof(HeuristicLabRole), IsDefault=true)]
+	[InheritanceMapping(Code="true", Type=typeof(HeuristicLabPermissionRole))]
+	public abstract partial class HeuristicLabAbstractRole : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private long _ID = default(long);
+		
+		private string _roleName;
+		
+		private long _parentRoleID;
+		
+		private bool _RoleType;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnRoleNameChanging(string value);
+    partial void OnRoleNameChanged();
+    partial void OnParentRoleIDChanging(long value);
+    partial void OnParentRoleIDChanged();
+    partial void OnIsPermissionChanging(bool value);
+    partial void OnIsPermissionChanged();
+    #endregion
+		
+		public HeuristicLabAbstractRole()
+		{
+			OnCreated();
+		}
+		
+		[Column(Storage="_ID", AutoSync=AutoSync.OnInsert, IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		public long ID
+		{
+			get
+			{
+				return this._ID;
+			}
+		}
+		
+		[Column(Name="roleName", Storage="_roleName", CanBeNull=false)]
+		public string RoleName
+		{
+			get
+			{
+				return this._roleName;
+			}
+			set
+			{
+				if ((this._roleName != value))
+				{
+					this.OnRoleNameChanging(value);
+					this.SendPropertyChanging();
+					this._roleName = value;
+					this.SendPropertyChanged("RoleName");
+					this.OnRoleNameChanged();
+				}
+			}
+		}
+		
+		[Column(Name="parentRoleID", Storage="_parentRoleID")]
+		public long ParentRoleID
+		{
+			get
+			{
+				return this._parentRoleID;
+			}
+			set
+			{
+				if ((this._parentRoleID != value))
+				{
+					this.OnParentRoleIDChanging(value);
+					this.SendPropertyChanging();
+					this._parentRoleID = value;
+					this.SendPropertyChanged("ParentRoleID");
+					this.OnParentRoleIDChanged();
+				}
+			}
+		}
+		
+		[Column(Name="RoleType", Storage="_RoleType", IsDiscriminator=true)]
+		public bool IsPermission
+		{
+			get
+			{
+				return this._RoleType;
+			}
+			set
+			{
+				if ((this._RoleType != value))
+				{
+					this.OnIsPermissionChanging(value);
+					this.SendPropertyChanging();
+					this._RoleType = value;
+					this.SendPropertyChanged("IsPermission");
+					this.OnIsPermissionChanged();
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	public partial class HeuristicLabRole : HeuristicLabAbstractRole
+	{
+		
+		private string _DummyField1;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnDummyField1Changing(string value);
+    partial void OnDummyField1Changed();
+    #endregion
+		
+		public HeuristicLabRole()
+		{
+			OnCreated();
+		}
+		
+		[Column(Storage="_DummyField1", CanBeNull=false)]
+		public string DummyField1
+		{
+			get
+			{
+				return this._DummyField1;
+			}
+			set
+			{
+				if ((this._DummyField1 != value))
+				{
+					this.OnDummyField1Changing(value);
+					this.SendPropertyChanging();
+					this._DummyField1 = value;
+					this.SendPropertyChanged("DummyField1");
+					this.OnDummyField1Changed();
+				}
+			}
+		}
+	}
+	
+	public partial class HeuristicLabPermissionRole : HeuristicLabAbstractRole
+	{
+		
+		private string _DummyField2;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnDummyField2Changing(string value);
+    partial void OnDummyField2Changed();
+    #endregion
+		
+		public HeuristicLabPermissionRole()
+		{
+			OnCreated();
+		}
+		
+		[Column(Storage="_DummyField2", CanBeNull=false)]
+		public string DummyField2
+		{
+			get
+			{
+				return this._DummyField2;
+			}
+			set
+			{
+				if ((this._DummyField2 != value))
+				{
+					this.OnDummyField2Changing(value);
+					this.SendPropertyChanging();
+					this._DummyField2 = value;
+					this.SendPropertyChanged("DummyField2");
+					this.OnDummyField2Changed();
+				}
+			}
+		}
+	}
+}
+#pragma warning restore 1591
Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/HeuristicLabUser.cs
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/HeuristicLabUser.cs	(revision 3941)
+++ branches/HeuristicLab.Services.Authentication Prototype/Persistence/HeuristicLabUser.cs	(revision 3941)
@@ -0,0 +1,114 @@
+﻿using System;
+using System.Web.Security;
+
+namespace Persistence {
+  partial class HeuristicLabUser : MembershipUser {
+    public override bool ChangePassword(string oldPassword, string newPassword) {
+      if (oldPassword == null) {
+        throw new ArgumentNullException("oldPassword");
+      }
+      if (newPassword == null) {
+        throw new ArgumentNullException("newPassword");
+      }
+      if (oldPassword.Length == 0) {
+        throw new ArgumentException("Parameter oldPassword must not be empty!");
+      }
+      if (newPassword.Length == 0) {
+        throw new ArgumentException("Parameter newPassword must not be empty!");
+      }
+
+      if (Password.CompareTo(oldPassword) == 0) {
+        Password = newPassword;
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    public override bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer) {
+      if (password == null) {
+        throw new ArgumentNullException("password");
+      }
+      if (newPasswordQuestion == null) {
+        throw new ArgumentNullException("newPasswordQuestion");
+      }
+      if (newPasswordAnswer == null) {
+        throw new ArgumentNullException("newPasswordAnswer");
+      }
+      if (password.Length == 0) {
+        throw new ArgumentException("Parameter password must not be empty!");
+      }
+      if (newPasswordQuestion.Length == 0) {
+        throw new ArgumentException("Parameter newPasswordQuestion must not be empty!");
+      }
+      if (newPasswordAnswer.Length == 0) {
+        throw new ArgumentException("Parameter newPasswordAnswer must not be empty!");
+      }
+
+      if (Password.CompareTo(password) == 0) {
+        _PasswordQuestion = newPasswordQuestion;
+        PasswordAnswer = newPasswordAnswer;
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    public override string GetPassword() {
+      return Password;
+    }
+
+    //
+    // Summary:
+    //     Gets the password for the membership user from the membership data store.
+    //
+    // Parameters:
+    //   passwordAnswer:
+    //     The password answer for the membership user.
+    //
+    // Returns:
+    //     The password for the membership user.
+    public override string GetPassword(string passwordAnswer) {
+      throw new NotImplementedException();
+    }
+
+    //
+    // Summary:
+    //     Resets a user's password to a new, automatically generated password.
+    //
+    // Returns:
+    //     The new password for the membership user.
+    public override string ResetPassword() {
+      throw new NotImplementedException();
+    }
+
+    //
+    // Summary:
+    //     Resets a user's password to a new, automatically generated password.
+    //
+    // Parameters:
+    //   passwordAnswer:
+    //     The password answer for the membership user.
+    //
+    // Returns:
+    //     The new password for the membership user.
+    public override string ResetPassword(string passwordAnswer) {
+      throw new NotImplementedException();
+    }
+
+    public override string ToString() {
+      return UserName;
+    }
+
+    //
+    // Summary:
+    //     Clears the locked-out state of the user so that the membership user can be
+    //     validated.
+    //
+    // Returns:
+    //     true if the membership user was successfully unlocked; otherwise, false.
+    public override bool UnlockUser() {
+      throw new NotImplementedException();
+    }
+  }
+}
Index: branches/HeuristicLab.Services.Authentication Prototype/Persistence/Persistence.csproj
===================================================================
--- branches/HeuristicLab.Services.Authentication Prototype/Persistence/Persistence.csproj	(revision 3940)
+++ branches/HeuristicLab.Services.Authentication Prototype/Persistence/Persistence.csproj	(revision 3941)
@@ -51,7 +51,10 @@
   <ItemGroup>
     <Compile Include="DatabaseUtil.cs" />
-    <Compile Include="DataClasses.cs">
+    <Compile Include="DataClasses.designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
       <DependentUpon>DataClasses.dbml</DependentUpon>
     </Compile>
+    <Compile Include="HeuristicLabUser.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
@@ -63,4 +66,5 @@
       <Generator>MSLinqToSQLGenerator</Generator>
       <SubType>Designer</SubType>
+      <LastGenOutput>DataClasses.designer.cs</LastGenOutput>
     </None>
   </ItemGroup>
