111 lines
3.2 KiB
C#
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
|
|
|
|
}
|
|
}
|