This repository has been archived on 2025-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
BreCal/src/brecal.model/RoleAssignment.cs

111 lines
3.2 KiB
C#

using System.Data;
namespace brecal.model
{
public class RoleAssignment : DbEntity
{
#region Properties
public int? UserId { get; set; }
public int? RoleId { get; set; }
public Role? AssignedRole { get; set; }
public User? AssignedUser { get; set; }
#endregion
#region public static methods
public static async Task<List<RoleAssignment>> LoadForUser(User? u, IDBManager manager)
{
List<DbEntity> loadResultList = await manager.Load(SetLoadQuery, LoadElems, args: u);
List<RoleAssignment> result = new();
foreach (RoleAssignment ra in loadResultList.Cast<RoleAssignment>())
{
ra.AssignedUser = u;
result.Add(ra);
}
return result;
}
public static void SetLoadQuery(IDbCommand cmd, params object?[] args)
{
cmd.CommandText = "SELECT id, user_id, role_id FROM user_role_map WHERE user_id = @UID";
if (args.Length != 1 || !(args[0] is User))
throw new ArgumentException("loader needs single user as argument");
IDataParameter uid = cmd.CreateParameter();
uid.ParameterName = "UID";
if (args[0] is User u)
uid.Value = u.Id;
cmd.Parameters.Add(uid);
}
public static List<DbEntity> LoadElems(IDataReader reader)
{
List<DbEntity> result = new List<DbEntity>();
while (reader.Read())
{
RoleAssignment ra = new();
ra.Id = (uint)reader.GetInt32(0);
if (!reader.IsDBNull(1)) ra.UserId = reader.GetInt32(1);
if (!reader.IsDBNull(2)) ra.RoleId = reader.GetInt32(2);
result.Add(ra);
}
return result;
}
#endregion
#region overrides
public override void SetUpdate(IDbCommand cmd)
{
throw new NotImplementedException();
}
public override void SetCreate(IDbCommand cmd)
{
cmd.CommandText = "INSERT INTO user_role_map (user_id, role_id) VALUES (@USERID, @ROLEID)";
IDbDataParameter userid = cmd.CreateParameter();
userid.ParameterName = "USERID";
userid.Value = this.UserId;
cmd.Parameters.Add(userid);
IDbDataParameter roleid = cmd.CreateParameter();
roleid.ParameterName = "ROLEID";
roleid.Value = this.RoleId;
cmd.Parameters.Add(roleid);
}
public override void SetDelete(IDbCommand cmd)
{
cmd.CommandText = "DELETE FROM user_role_map WHERE id = @ID";
IDataParameter idParam = cmd.CreateParameter();
idParam.ParameterName = "ID";
idParam.Value = this.Id;
cmd.Parameters.Add(idParam);
}
public override string ToString()
{
if (this.AssignedRole == null)
{
return $"{Id}: <defunct role>";
}
else
{
return AssignedRole.Name ?? AssignedRole.Id.ToString();
}
}
#endregion
}
}