Example #1
0
        private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(string roleId, string tenantId)
        {
            var cacheKey = roleId + "@" + (!string.IsNullOrEmpty(tenantId) ? tenantId : "default");

            return(await cacheManager.GetRolePermissionCache().GetCancelableAsync(cacheKey, async(cancellationToken) =>
            {
                var cacheItem = new RolePermissionCacheItem(roleId);
                var normalizedRoleId = KeyNormalizer.NormalizeName(roleId);
                var staticRole = options.Role.StaticRoles.FirstOrDefault(c =>
                                                                         string.Equals(c.Id, normalizedRoleId, StringComparison.OrdinalIgnoreCase));

                if (staticRole != null)
                {
                    foreach (var permission in permissionStore.GetAll())
                    {
                        if (staticRole.IsGrantedByDefault(permission))
                        {
                            cacheItem.GrantedPermissions.Add(permission.Name);
                        }
                    }
                }
                else
                {
                    var role = await Store.FindByIdAsync(normalizedRoleId, cancellationToken);

                    if (role == null)
                    {
                        throw new StructureException("There is no role with given id: " + normalizedRoleId);
                    }
                }

                if (Store is IRolePermissionStore <TRolePermission> rolePermissionStore)
                {
                    foreach (var rolePermission in await rolePermissionStore.GetPermissionsAsync(normalizedRoleId, cancellationToken))
                    {
                        if (rolePermission.IsGranted)
                        {
                            cacheItem.GrantedPermissions.AddIfNotContains(rolePermission.PermissionName);
                        }
                        else
                        {
                            cacheItem.GrantedPermissions.Remove(rolePermission.PermissionName);
                        }
                    }
                }

                return cacheItem;
            }));
        }
Example #2
0
        private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(int roleId)
        {
            var cacheKey = roleId + "@" + (AbpSession.TenantId ?? 0);

            return(await _cacheManager.GetRolePermissionCache().GetAsync(cacheKey, async() =>
            {
                var newCacheItem = new RolePermissionCacheItem(roleId);

                foreach (var permissionInfo in await _rolePermissionRepository.GetAllListAsync(c => c.RoleId == roleId))
                {
                    if (permissionInfo.IsGranted)
                    {
                        newCacheItem.GrantedPermissions.Add(permissionInfo.Name);
                    }
                }

                return newCacheItem;
            }));
        }
Example #3
0
        /// <summary>
        /// 获取用户角色权限缓存
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public RolePermissionCacheItem GetRolePermissionCacheItem(int roleId)
        {
            var cacheKey = roleId + "@" + (GetCurrentTenantId() ?? 0);

            return(_cacheManager.GetRolePermissionCache().Get(cacheKey, _ =>
            {
                var newCacheItem = new RolePermissionCacheItem(roleId);
                var permissions = _setrolepermissionRepository.GetAll()
                                  .Where(r => r.RoleId == roleId && r.IsGranted)
                                  .Select(r => r.Name)
                                  .ToList();
                var list = _permissionManager.GetAllPermissions();
                foreach (var permission in list.Where(l => permissions.Contains(l.Name)))
                {
                    newCacheItem.GrantedPermissions.Add(permission.Name);
                }
                return newCacheItem;
            }));
        }
Example #4
0
        private async Task <RolePermissionCacheItem> GetRolePermissionCacheItemAsync(int roleId)
        {
            var cacheKey = "role@" + roleId;

            return(await _cacheManager.GetRolePermissionCache().GetAsync(cacheKey, async() =>
            {
                var newCacheItem = new RolePermissionCacheItem(roleId);

                foreach (var permissionInfo in await RolePermissionStore.GetPermissionsAsync(roleId))
                {
                    if (permissionInfo.IsGranted)
                    {
                        newCacheItem.GrantedPermissions.Add(permissionInfo.Name);
                    }
                    else
                    {
                        newCacheItem.ProhibitedPermissions.Add(permissionInfo.Name);
                    }
                }
                return newCacheItem;
            }));
        }