BaseRole.cs

48 lines | 1.168 kB Blame History Raw Download
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.ComponentModel.DataAnnotations.Schema;

using Microsoft.AspNetCore.Identity;

namespace Tools.Identity.EF.Entities
{
    public class BaseRole<TKey, TUser, TRole>
        : IdentityRole<TKey>

        where TKey : IEquatable<TKey>
        where TUser : BaseUser<TKey, TUser, TRole>
        where TRole : BaseRole<TKey, TUser, TRole>
    {
        public virtual List<BaseUserRole<TKey, TUser, TRole>> Users { set; get; }


        [NotMapped]
        public IReadOnlyDictionary<TKey, TUser> UsersDict
        {
            get => Users
                .ToDictionary(e => e.UserId, e => e.User);
            set => Users = value
                .Select(
                    e => new BaseUserRole<TKey, TUser, TRole>()
                    {
                        UserId = e.Key,
                        User = e.Value,

                        RoleId = Id,
                        Role = (TRole)this
                    }
                )
                .ToList();
        }



        public BaseRole() { }
        public BaseRole(string roleName) 
            : base(roleName) { }
    }

}