예제 #1
0
        public bool UserHasPermission(UserAndOrganizationDTO userAndOrg, string permissionName)
        {
            if (!_permissionsCache.TryGetValue(userAndOrg.UserId, out var permissions))
            {
                permissions = _permissionsDbSet
                              .Where(p => p.Roles.Any(r => r.Users.Any(u => u.UserId == userAndOrg.UserId)))
                              .Where(FilterActiveModules(userAndOrg.OrganizationId))
                              .Select(x => x.Name)
                              .ToList();
                _permissionsCache.TryAdd(userAndOrg.UserId, permissions);
            }

            var isPermitted = permissions.Contains(permissionName);

            return(isPermitted);
        }
예제 #2
0
        public static TItem GetOrCreate <TItem>(this ICustomCache cache, object key, Func <ICacheEntry, TItem> factory)
        {
            if (!cache.TryGetValue(key, out object result))
            {
                ICacheEntry entry = cache.CreateEntry(key);
                result = factory(entry);
                entry.SetValue(result);
                entry.Dispose();
            }

            return((TItem)result);
        }
예제 #3
0
        public void OnActionExecuting(ActionExecutingContext context)
        {
            string cacheKey = GetCacheKey(context.HttpContext.Request);

            if (!_cache.TryGetValue(cacheKey, out ActionExecutedContext previousResponse))
            {
                return;
            }

            context.Result = previousResponse.Result;
            context.HttpContext.Response.ApplyResponseFromCacheHeader();
        }
예제 #4
0
        public async Task Should_Get_Admin_User_Permissions_From_Cache()
        {
            _permissionCache.TryGetValue("UserId1", out _).Returns(x =>
            {
                x[1] = new List <string>
                {
                    "TEST1_BASIC",
                    "TEST1_ADMIN"
                };
                return(true);
            });

            var permissionGroups = (await _permissionService.GetUserPermissionsAsync("UserId1", 1)).ToList();

            Assert.AreEqual(2, permissionGroups.Count);
            Assert.AreEqual("TEST1_BASIC", permissionGroups.ToArray()[0]);
            Assert.AreEqual("TEST1_ADMIN", permissionGroups.ToArray()[1]);
        }
예제 #5
0
        public void Should_Get_Admin_User_Permissions_From_Cache()
        {
            IEnumerable <string> permissions;

            _permissionCache.TryGetValue("UserId1", out permissions).Returns(x =>
            {
                x[1] = new List <string>()
                {
                    "TEST1_BASIC",
                    "TEST1_ADMIN"
                };
                return(true);
            });

            var permissionGroups = _permissionService.GetUserPermissions("UserId1", 1);

            Assert.AreEqual(2, permissionGroups.Count());
            Assert.AreEqual("TEST1_BASIC", permissionGroups.ToArray()[0]);
            Assert.AreEqual("TEST1_ADMIN", permissionGroups.ToArray()[1]);
        }