//******************************************************************************************************
// UserAccount.cs - Gbtc
//
// Copyright © 2016, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may
// not use this file except in compliance with the License. You may obtain a copy of the License at:
//
// http://opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 02/27/2016 - J. Ritchie Carroll
// Generated original version of source code.
//
//******************************************************************************************************
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using GSF.ComponentModel;
using GSF.ComponentModel.DataAnnotations;
using GSF.Data.Model;
using GSF.Identity;
namespace GSF.Security.Model
{
///
/// Model for UserAccount table.
///
///
/// A record in this table can represent a database defined user with associated detail
/// or an Active Directory user that maintains its own user details.
///
[PrimaryLabel("Name")]
public class UserAccount
{
static UserAccount()
{
TableOperations.TypeRegistry.RegisterType();
}
///
/// Unique user account ID field.
///
[PrimaryKey(true)]
public Guid ID { get; set; }
///
/// User name field - stores SID for AD authentication.
///
[Label("User Name")]
[Required]
[StringLength(200)]
[Searchable]
public string Name { get; set; }
///
/// Password field - stores password hash for DB authentication only.
///
[Required]
[StringLength(200)]
public string Password { get; set; }
///
/// First name field - for DB authentication only.
///
[Label("First Name")]
[StringLength(200)]
[Searchable]
public string FirstName { get; set; }
///
/// Last name field - for DB authentication only.
///
[Label("Last Name")]
[StringLength(200)]
[Searchable]
public string LastName { get; set; }
///
/// Default Node ID field.
///
[Required]
[DefaultValueExpression("AdoSecurityProvider.DefaultNodeID", Cached = true)]
public Guid DefaultNodeID { get; set; }
///
/// Phone number field - for DB authentication only.
///
[StringLength(200)]
public string Phone { get; set; }
///
/// E-mail field - for DB authentication only.
///
[Label("E-Mail")]
[StringLength(200)]
[EmailValidation]
public string Email { get; set; }
///
/// Change password on date field - for DB authentication only.
///
public DateTime? ChangePasswordOn { get; set; }
///
/// Use Active Directory authentication field.
///
[Label("Use Active Directory Authentication")]
[DefaultValue(true)]
public bool UseADAuthentication { get; set; }
///
/// User locked-out field.
///
[Label("Locked Out")]
public bool LockedOut { get; set; }
///
/// Created on field.
///
[DefaultValueExpression("DateTime.UtcNow")]
public DateTime CreatedOn { get; set; }
///
/// Created by field.
///
[Required]
[StringLength(200)]
[DefaultValueExpression("UserInfo.CurrentUserID")]
public string CreatedBy { get; set; }
///
/// Updated on field.
///
[DefaultValueExpression("this.CreatedOn", EvaluationOrder = 1)]
[UpdateValueExpression("DateTime.UtcNow")]
public DateTime UpdatedOn { get; set; }
///
/// Updated by field.
///
[Required]
[StringLength(200)]
[DefaultValueExpression("this.CreatedBy", EvaluationOrder = 1)]
[UpdateValueExpression("UserInfo.CurrentUserID")]
public string UpdatedBy { get; set; }
///
/// User account name, converted from security ID as needed.
///
[NonRecordField]
public string AccountName => UserInfo.SIDToAccountName(Name);
}
}