Esempio n. 1
0
        public void Initialize()
        {
            using var db = dataBaseFactory.CreateDb();
            var roles = db.Roles.Select(x => new RoleTmp(x)).ToDictionary(x => x.Id);

            AllOperationKeys = db.OperationKeys.Select(x => new OperationKeyCached(x)).ToImmutableList();


            var categoryAccesses = db.CategoryAccess.Select(x => new CategoryAccessTmp(x))
                .ToDictionary(x => x.Id);

            foreach (CategoryOperationAccess categoryOperationAccess in db.CategoryOperationAccess.ToList())
            {
                categoryAccesses[categoryOperationAccess.CategoryAccessId].CategoryOperationAccesses
                    .Add(categoryOperationAccess.OperationKeyId, categoryOperationAccess.Access);
            }

            foreach (var categoryAccess in categoryAccesses.Values)
            {
                roles[categoryAccess.RoleId].CategoryAccesses
                    .Add(categoryAccess);
            }

            AllRoles = roles.Values.ToImmutableDictionary(x => x.Name, x => new RoleCached(x));
            AdminRole = AllRoles[RoleNames.Admin];
        }
Esempio n. 2
0
        private bool GetAccessForCategory(RoleCached role, CategoryCached category, int operationKey)
        {
            while (category != null)
            {
                if (role.CategoryAccesses.ContainsKey(category.Id))
                {
                    var categoryAccess = role.CategoryAccesses[category.Id];
                    if (categoryAccess.CategoryOperationAccesses.ContainsKey(operationKey))
                    {
                        return(categoryAccess.CategoryOperationAccesses[operationKey]);
                    }

                    category = category.Parent;
                }
                else
                {
                    category = category.Parent;
                }
            }

            return(false);
        }
Esempio n. 3
0
 public void Reset()
 {
     _allOperationKeys = null;
     _allRoles         = null;
     _adminRole        = null;
 }