public virtual void SetRoleResources(string roleKey, List <string> resourceKeys) { var allRoleResources = _db.Set <TRoleResource>().IgnoreQueryFilters().AsNoTracking().ToList().Where(a => a.GetRoleKey() == roleKey).ToList(); // 这个是否为全表查询 var allResources = _db.Set <TResource>().IgnoreQueryFilters().AsNoTracking().ToList(); // 删除角色权限 allRoleResources.Where(a => !resourceKeys.Contains(a.GetResourceKey())).ToList().ForEach(a => { _db.Remove(a); }); // 增加角色权限 resourceKeys.Where(a => !allRoleResources.Select(i => i.GetResourceKey()).Contains(a)).ToList().ForEach(resourceKey => { if (allResources.Any(a => a.GetKey() == resourceKey)) { var addRoleResource = new TRoleResource(); DbSetExtenssion.UpdateEntityCommonField(addRoleResource, EEntityOperType.Update, CurrentUserId, CurrentTenantId); addRoleResource.SetRoleKey(roleKey); addRoleResource.SetResourceKey(resourceKey); _db.Add(addRoleResource); } }); _db.SaveChanges(); _memoryCache.Remove(roleResourceCacheKey); }
public virtual void SetUserRoles(string userKey, List <string> roleKeys) { // todo 全表查了 var allUserRoles = _db.Set <TUserRole>().IgnoreQueryFilters().AsEnumerable().Where(a => a.GetUserKey() == userKey).ToList(); var allRole = _db.Set <TRole>().IgnoreQueryFilters().AsNoTracking().ToList(); // 删除授权 allUserRoles.Where(a => !roleKeys.Contains(a.GetRoleKey())).ToList().ForEach(a => { _db.Remove(a); }); //增加授权 roleKeys.Where(a => !allUserRoles.Select(i => i.GetRoleKey()).Contains(a) && !string.IsNullOrEmpty(a)).ToList().ForEach(roleKey => { if (allRole.Any(a => a.GetKey() == roleKey)) { var addItem = new TUserRole(); DbSetExtenssion.UpdateEntityCommonField(addItem, EEntityOperType.Update, CurrentUserId, CurrentTenantId); addItem.SetRoleKey(roleKey); addItem.SetUserKey(userKey); _db.Add(addItem); } }); _db.SaveChanges(); _memoryCache.Remove(userRoleCacheKey); }
/// <summary> /// 保存资源。会从资源id和资源code两字段考虑是新增还是修改,无删除 /// </summary> /// <param name="resources"></param> public virtual void SaveResources(List <IResource> resources) { var allResources = _db.Set <TResource>().ToList(); resources.ForEach(resource => { var resourceKey = resource.GetKey(); var resourceEntity = allResources.FirstOrDefault(a => a.GetKey() == resourceKey || a.GetResourceCode() == resource.GetResourceCode()); if (resourceEntity == null) { //add var addDto = new TResource(); EasyMap.Map(resource.GetType(), typeof(TResource), resource, addDto, null); _db.Add(addDto); DbSetExtenssion.UpdateEntityCommonField(resourceEntity, EEntityOperType.Add, CurrentUserId, CurrentTenantId); } else { EasyMap.Map(resource.GetType(), typeof(TResource), resource, resourceEntity, null); DbSetExtenssion.UpdateEntityCommonField(resourceEntity, EEntityOperType.Update, CurrentUserId, CurrentTenantId); } }); _db.SaveChanges(); _memoryCache.Remove(resourceCacheKey); }