Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        /// <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);
        }