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]; }
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); }
public void Reset() { _allOperationKeys = null; _allRoles = null; _adminRole = null; }