init
This commit is contained in:
@@ -0,0 +1,265 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
/// <summary>
|
||||
/// this class encapsulates a single user
|
||||
/// </summary>
|
||||
public class User : TagAwareBase
|
||||
{
|
||||
public enum DefaultRoles
|
||||
{
|
||||
Administrator = 0,
|
||||
PowerUser = 1,
|
||||
User = 2,
|
||||
Guest = 3
|
||||
}
|
||||
public enum UserPermissionLevels
|
||||
{
|
||||
Deny = 0,
|
||||
Read = 1,
|
||||
ReadAndExecute = 2,
|
||||
Edit = 3,
|
||||
Admin = 4
|
||||
}
|
||||
public enum Tags
|
||||
{
|
||||
User,
|
||||
Role,
|
||||
Version,
|
||||
LastModified,
|
||||
LastModifiedBy,
|
||||
Name,
|
||||
UserName,
|
||||
Password,
|
||||
LocalOnly,
|
||||
Permissions,
|
||||
Visibility,
|
||||
Id
|
||||
}
|
||||
public enum XmlFields
|
||||
{
|
||||
ID,
|
||||
UserName,
|
||||
DisplayName,
|
||||
Password,
|
||||
// ReSharper disable once InconsistentNaming
|
||||
IUIItemPermissions,
|
||||
// ReSharper disable once InconsistentNaming
|
||||
IUIItemVisibility,
|
||||
Role,
|
||||
LastModified,
|
||||
LastModifiedBy,
|
||||
Version,
|
||||
LocalOnly,
|
||||
UserTags
|
||||
}
|
||||
|
||||
private const string DEFAULT_LAST_MODIFIED_BY = "---";
|
||||
private const string DEFAULT_ADMIN_USERNAME = "Admin";
|
||||
private const string DEFAULT_GUEST_USERNAME = "Guest";
|
||||
private const string DEFAULT_POWERUSER_USERNAME = "PowerUser";
|
||||
private const string DEFAULT_USER_USERNAME = "User";
|
||||
private const int INVALID_ID = -1;
|
||||
/// <summary>
|
||||
/// a default user is a user with one of the default roles and names, like Admin or Guest
|
||||
/// return true if is a default user
|
||||
/// </summary>
|
||||
public bool IsADefaultUser => UserName == GetDefaultUserName(Role);
|
||||
|
||||
/// <summary>
|
||||
/// hash of password is seeded and stored in xml
|
||||
/// hash is seeded with computable information known about the user
|
||||
/// hash is base64encoding for xml niceness
|
||||
/// xml is encrypted prior to writing to file
|
||||
/// </summary>
|
||||
private string _password = "";
|
||||
/// <summary>
|
||||
/// the user friendly name for a user, a display name
|
||||
/// </summary>
|
||||
private string _name;
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
set => SetProperty(ref _name, value, Tags.Name.ToString());
|
||||
}
|
||||
/// <summary>
|
||||
/// the user name for the user, a short unique name for the user
|
||||
/// </summary>
|
||||
private string _userName = string.Empty;
|
||||
public string UserName
|
||||
{
|
||||
get => _userName;
|
||||
set => SetProperty(ref _userName, value, Tags.UserName.ToString());
|
||||
}
|
||||
|
||||
private int _id = INVALID_ID;
|
||||
public int Id
|
||||
{
|
||||
get => _id;
|
||||
set => SetProperty(ref _id, value, Tags.Id.ToString());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// the default role for the user, if a permission is not explicitly set for the user
|
||||
/// it will use this default role to determine the effect permission
|
||||
/// </summary>
|
||||
private DefaultRoles _myRole = DefaultRoles.Guest;
|
||||
public DefaultRoles Role
|
||||
{
|
||||
get => _myRole;
|
||||
set
|
||||
{
|
||||
if (IsADefaultUser && _myRole != value) { throw new NotSupportedException(); }
|
||||
SetProperty(ref _myRole, value, Tags.Role.ToString());
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// right now the version field is updated whenever the user is updated, so it keeps
|
||||
/// track of how many times it has been modified
|
||||
/// </summary>
|
||||
private int _version;
|
||||
public int Version
|
||||
{
|
||||
get => _version;
|
||||
set => SetProperty(ref _version, value, Tags.Version.ToString());
|
||||
}
|
||||
/// <summary>
|
||||
/// the time the user was last modified or commited to the db
|
||||
/// </summary>
|
||||
private DateTime _lastModified = DateTime.MinValue;
|
||||
public DateTime LastModified
|
||||
{
|
||||
get => _lastModified;
|
||||
set => SetProperty(ref _lastModified, value, Tags.LastModified.ToString());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// the user that last modified the user
|
||||
/// </summary>
|
||||
private string _lastModifiedBy = DEFAULT_LAST_MODIFIED_BY;
|
||||
public string LastModifiedBy
|
||||
{
|
||||
get => _lastModifiedBy;
|
||||
set => SetProperty(ref _lastModifiedBy, value, Tags.LastModifiedBy.ToString());
|
||||
}
|
||||
/// <summary>
|
||||
/// a remnant of the multiple database era, this was to mark a user as being local to this db and should never
|
||||
/// be pushed to the central db
|
||||
/// </summary>
|
||||
private bool _bLocalOnly;
|
||||
public bool LocalOnly
|
||||
{
|
||||
get => _bLocalOnly;
|
||||
set => SetProperty(ref _bLocalOnly, value, Tags.LocalOnly.ToString());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// lookup of permissions by UI item
|
||||
/// </summary>
|
||||
private readonly Dictionary<IUIItems, UserPermissionLevels> _tabPermissions = new Dictionary<IUIItems, UserPermissionLevels>();
|
||||
/// <summary>
|
||||
/// lookup of visibility by UI item
|
||||
/// </summary>
|
||||
private readonly Dictionary<IUIItems, bool> _showTabs = new Dictionary<IUIItems, bool>();
|
||||
/// <summary>
|
||||
/// lock for accessing tab permissions or visibility
|
||||
/// </summary>
|
||||
private static readonly object TabPermissionsLock = new object();
|
||||
|
||||
// #endregion properties
|
||||
|
||||
public override ConstraintHelper[] GetConstraints()
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
new ConstraintHelper
|
||||
{
|
||||
ColumnName = DbOperations.Users.UserFields.UserName.ToString(),
|
||||
DbType = SqlDbType.NVarChar,
|
||||
DbValue = UserName
|
||||
}
|
||||
};
|
||||
}
|
||||
public override string LookupTable => DbOperations.Users.USERS_TABLE;
|
||||
public User(DataRow row)
|
||||
{
|
||||
Id = Convert.ToInt32(row[DbOperations.Users.UserFields.ID.ToString()]);
|
||||
UserName = (string)row[DbOperations.Users.UserFields.UserName.ToString()];
|
||||
Name = (string)row[DbOperations.Users.UserFields.DisplayName.ToString()];
|
||||
_password = (string)row[DbOperations.Users.UserFields.Password.ToString()];
|
||||
_myRole = (DefaultRoles)Convert.ToInt32(row[DbOperations.Users.UserFields.Role.ToString()]);
|
||||
LastModified = (DateTime)row[DbOperations.Users.UserFields.LastModified.ToString()];
|
||||
LastModifiedBy = (string)row[DbOperations.Users.UserFields.LastModifiedBy.ToString()];
|
||||
LocalOnly = Convert.ToBoolean(row[DbOperations.Users.UserFields.LocalOnly.ToString()]);
|
||||
}
|
||||
public string GetPermissionSerialized()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
lock (TabPermissionsLock)
|
||||
{
|
||||
var i = _tabPermissions.GetEnumerator();
|
||||
while (i.MoveNext())
|
||||
{
|
||||
if (sb.Length > 0) { sb.Append(","); }
|
||||
sb.Append(i.Current.Key.GetName());
|
||||
sb.Append("=");
|
||||
sb.Append(((int)i.Current.Value).ToString());
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public static string GetDefaultUserName(DefaultRoles role)
|
||||
{
|
||||
switch (role)
|
||||
{
|
||||
case DefaultRoles.Administrator:
|
||||
return DEFAULT_ADMIN_USERNAME;
|
||||
case DefaultRoles.Guest:
|
||||
return DEFAULT_GUEST_USERNAME;
|
||||
case DefaultRoles.PowerUser:
|
||||
return DEFAULT_POWERUSER_USERNAME;
|
||||
case DefaultRoles.User:
|
||||
return DEFAULT_USER_USERNAME;
|
||||
default:
|
||||
throw new NotSupportedException("Unknown role " + role);
|
||||
}
|
||||
}
|
||||
public string GetVisibilitySerialized()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var i2 = _showTabs.GetEnumerator();
|
||||
while (i2.MoveNext())
|
||||
{
|
||||
if (sb.Length > 0) { sb.Append(","); }
|
||||
sb.Append(i2.Current.Key.GetName());
|
||||
sb.Append("=");
|
||||
sb.Append(i2.Current.Value ? "1" : "0");
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
public Dictionary<string, string> GetValues()
|
||||
{
|
||||
var elementNameValuePairs = new Dictionary<string, string>();
|
||||
|
||||
elementNameValuePairs[XmlFields.ID.ToString()] = Id.ToString();
|
||||
elementNameValuePairs[XmlFields.UserName.ToString()] = UserName;
|
||||
elementNameValuePairs[XmlFields.DisplayName.ToString()] = Name;
|
||||
elementNameValuePairs[XmlFields.Password.ToString()] = _password;
|
||||
elementNameValuePairs[XmlFields.IUIItemPermissions.ToString()] = GetPermissionSerialized();
|
||||
elementNameValuePairs[XmlFields.IUIItemVisibility.ToString()] = GetVisibilitySerialized();
|
||||
elementNameValuePairs[XmlFields.Role.ToString()] = Role.ToString();
|
||||
elementNameValuePairs[XmlFields.LastModified.ToString()] = LastModified.ToString(CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[XmlFields.LastModifiedBy.ToString()] = LastModifiedBy;
|
||||
elementNameValuePairs[XmlFields.Version.ToString()] = Version.ToString(CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[XmlFields.LocalOnly.ToString()] = LocalOnly.ToString(CultureInfo.InvariantCulture);
|
||||
elementNameValuePairs[XmlFields.UserTags.ToString()] = GetTagsCommaSeperatedString();
|
||||
|
||||
return elementNameValuePairs;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Data.OleDb;
|
||||
|
||||
namespace DatabaseExport
|
||||
{
|
||||
public class MMEFineLocations1 : AbstractOLEDbWrapper
|
||||
{
|
||||
public string S_GUID { get; }
|
||||
|
||||
public string Fine_Loc_1 { get; }
|
||||
|
||||
public string Text_L1 { get; }
|
||||
|
||||
public string Text_L2 { get; }
|
||||
|
||||
public long Version { get; }
|
||||
|
||||
public DateTime Date { get; }
|
||||
|
||||
public string Remarks { get; }
|
||||
|
||||
public bool Expired { get; }
|
||||
|
||||
public string SortKey { get; }
|
||||
|
||||
public DateTime Last_Change { get; }
|
||||
|
||||
public string Last_Change_Text { get; }
|
||||
|
||||
public string History { get; }
|
||||
|
||||
public MMEPossibleChannels.MMEChannelTypes RecordType { get; } = MMEPossibleChannels.MMEChannelTypes.ISO13499_106;
|
||||
|
||||
public MMEFineLocations1(string sGuid, string fineLoc1, string textL1, string textL2, long version, DateTime date,
|
||||
string remarks, bool expired, string sortKey, DateTime lastChange, string lastChangeText, string history,
|
||||
MMEPossibleChannels.MMEChannelTypes type)
|
||||
{
|
||||
RecordType = type;
|
||||
S_GUID = sGuid;
|
||||
Fine_Loc_1 = fineLoc1;
|
||||
Text_L1 = textL1;
|
||||
Text_L2 = textL2;
|
||||
Version = version;
|
||||
Date = date;
|
||||
Remarks = remarks;
|
||||
Expired = expired;
|
||||
SortKey = sortKey;
|
||||
Last_Change = lastChange;
|
||||
Last_Change_Text = lastChangeText;
|
||||
History = history;
|
||||
}
|
||||
public static MMEFineLocations1[] GetFineLocations1()
|
||||
{
|
||||
var fineLocations1 = new List<MMEFineLocations1>();
|
||||
try
|
||||
{
|
||||
using (var cmd = DbOperations.GetISOCommand())
|
||||
{
|
||||
cmd.CommandType = CommandType.Text;
|
||||
cmd.CommandText = "SELECT * FROM MMEFineLocations1";
|
||||
try
|
||||
{
|
||||
using (var ISOReader = cmd.ExecuteReader())
|
||||
{
|
||||
while (ISOReader.Read())
|
||||
{
|
||||
try
|
||||
{
|
||||
string sGuid = ISOReader["s_GUID"].ToString();
|
||||
string sFineLoc1 = ISOReader["FINE_LOC_1"].ToString();
|
||||
string textL1 = ISOReader["TEXT_L1"].ToString();
|
||||
string textL2 = ISOReader["TEXT_L2"].ToString();
|
||||
long version = Convert.ToInt64(ISOReader["VERSION"]);
|
||||
DateTime date = (DateTime)ISOReader["DATE"];
|
||||
string remarks = ISOReader["REMARKS"].ToString();
|
||||
bool expired = (bool)ISOReader["EXPIRED"];
|
||||
string sortkey = ISOReader["SORTKEY"].ToString();
|
||||
DateTime lastChange = GetDate(ISOReader, "LAST_CHANGE");
|
||||
string lastChangeText = ISOReader["LAST_CHANGE_TEXT"].ToString();
|
||||
string history = ISOReader["HISTORY"].ToString();
|
||||
fineLocations1.Add(new MMEFineLocations1(sGuid, sFineLoc1, textL1, textL2, version, date,
|
||||
remarks, expired, sortkey, lastChange, lastChangeText, history, MMEPossibleChannels.MMEChannelTypes.ISO13499_106));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
cmd.Connection.Dispose();
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var cmd = DbOperations.GetCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandText = string.Format("SELECT * FROM {0}", DbOperations.MMETables.MMEFineLocations1Table);
|
||||
|
||||
using (var ds = DbOperations.Connection.QueryDataSet(cmd))
|
||||
{
|
||||
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
|
||||
{
|
||||
foreach (System.Data.DataRow dr in ds.Tables[0].Rows)
|
||||
{
|
||||
var date = DateTime.Now;
|
||||
var expired = false;
|
||||
var fineLoc1 = "??";
|
||||
var history = "";
|
||||
var lastChange = DateTime.Now;
|
||||
var lastChangeText = "";
|
||||
var remarks = "";
|
||||
var sGuid = "";
|
||||
var sortKey = "";
|
||||
var text1 = "";
|
||||
var text2 = "";
|
||||
var version = 0;
|
||||
var fields = Enum.GetValues(typeof(DbOperations.MMETables.MMEFineLocations1Fields))
|
||||
.Cast<DbOperations.MMETables.MMEFineLocations1Fields>().ToArray();
|
||||
foreach (var field in fields)
|
||||
{
|
||||
if (DBNull.Value.Equals(dr[field.ToString()])) { continue; }
|
||||
try
|
||||
{
|
||||
switch (field)
|
||||
{
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.DATE:
|
||||
date = Convert.ToDateTime(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.EXPIRED:
|
||||
expired = Convert.ToBoolean(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.FINE_LOC_1:
|
||||
fineLoc1 = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.HISTORY:
|
||||
history = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.LAST_CHANGE:
|
||||
lastChange = Convert.ToDateTime(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.LAST_CHANGE_TEXT:
|
||||
lastChangeText = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.REMARKS:
|
||||
remarks = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.s_GUID:
|
||||
sGuid = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.SORTKEY:
|
||||
sortKey = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.TEXT_L1:
|
||||
text1 = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.TEXT_L2:
|
||||
text2 = Convert.ToString(dr[field.ToString()]);
|
||||
break;
|
||||
case DbOperations.MMETables.MMEFineLocations1Fields.VERSION:
|
||||
version = Convert.ToInt32(dr[field.ToString()]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
var fineLoc = new MMEFineLocations1(sGuid.ToString(), fineLoc1, text1, text2,
|
||||
Convert.ToInt64(version), date, remarks, expired, sortKey, lastChange, lastChangeText,
|
||||
history, MMEPossibleChannels.MMEChannelTypes.SQL);
|
||||
fineLocations1.Add(fineLoc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
cmd.Connection.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//ignore
|
||||
}
|
||||
return fineLocations1.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user