protected override ScriptUserDefinition GetData() { var result = new ScriptUserDefinition(); if (!(UserAccessor.User?.GetUserDefinition(UserRetriever) is UserDefinition user)) { result.Permissions = new Dictionary <string, bool>(); return(result); } result.Username = user.Username; result.DisplayName = user.DisplayName; result.IsAdmin = user.Username == "admin"; result.Permissions = Cache.GetLocalStoreOnly("ScriptUserPermissions:" + user.Id, TimeSpan.Zero, UserPermissionRow.Fields.GenerationKey, () => { var permissions = new Dictionary <string, bool>(StringComparer.OrdinalIgnoreCase); var permissionsUsedFromScript = Cache.GetLocalStoreOnly("PermissionsUsedFromScript", TimeSpan.Zero, RoleRow.Fields.GenerationKey, () => { return(UserPermissionRepository.ListPermissionKeys(Cache.Memory, TypeSource) .Where(permissionKey => { // this sends permission information for all permission keys to client side. // if you don't need all of them to be available from script, filter them here. // this is recommended for security / performance reasons... return true; }).ToArray()); }); foreach (var permissionKey in permissionsUsedFromScript) { if (Permissions.HasPermission(permissionKey)) { permissions[permissionKey] = true; } } return(permissions); }); return(result); }
protected override IEnumerable <string> GetData() { return(UserPermissionRepository.ListPermissionKeys(cache, typeSource)); }